$query = Model::query()->with([ 'relationOne', 'relationTwo', ...])$query = $query->join(DB::raw("( select * from <models_table> where <some_condition>) as new_model"), 'new_model.id', '=', '<models_table>.id')$query = $query-...
在 Eloquent 模型上进行关联查询主要分为两种方式,一种是懒惰式加载(动态属性),一种是渴求式加载(通过with方法)。从性能上来说,渴求式加载更优,因为它会提前从数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性的时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,...
默认情况下,Laravel 将根据模型的类名来确定给定模型的关联关系; 你也可以通过将关系名称作为 whereBelongsTo 方法的第二个参数来手动指定关系名称:$posts = Post::whereBelongsTo($user, 'author')->get(); 一对多检索有时一个模型可能有许多相关模型,如果你想很轻松的检索「最新」或「最旧」的相关模型。
我认为这是正确的方法:
$users = App\User::with(['posts' => function ($query) { $query->orderBy('created_at', 'desc'); }])->get();Copy延遲預載入有時你可能需要在上層模型已經被取得後才預載入關聯。例如,當你需要動態決定是否載入關聯模型時相當有幫助:$books = App\Book::all(); if ($someCondition) { $...
如果您想让中间表自动维护 created_at 和updated_at 时间戳,那么在定义关联时加上 withTimestamps 方法即可。return $this->belongsToMany('App\Role')->withTimestamps(); 通过中间表过滤关联数据在定义关联时,您可以使用 wherePivot 和wherePivotIn 方法过滤 belongsToMany 返回的结果:...
$posts = Post::whereDoesntHave('comments', function ($query) { $query->where('content', 'like', 'foo%'); })->get(); 统计关联模型如果你想要在不加载关联关系的情况下统计关联结果数目,可以使用 withCount 方法,该方法会放置一个 {relation}_count 字段到结果模型。例如:...
$posts = App\Post::whereDoesntHave('comments.author', function ($query) { $query->where('banned', 1); })->get();关联计数当你只是需要对关联关系进行计数,并不需要这些数据时,你可以使用 withCount 方法去实现,它将会以 {relation}_count 形式出现在的模型上。举例而言:...
has() is to filter the selecting model based on a relationship. So it acts very similarly to a normal WHERE condition. If you just use has('relation') that means you only want to get the models that have at least one related model in this relation.Example:...
在 Eloquent 模型上进行关联查询主要分为两种方式,一种是懒惰式加载(动态属性),一种是渴求式加载(通过with方法)。从性能上来说,渴求式加载更优,因为它会提前从数据库一次性查询所有关联数据,而懒惰式加载在每次查询动态属性的时候才会去执行查询,会多次连接数据库,性能上差一些(数据库操作主要开销在数据库连接上,...