[英]Laravel eager load relationship with added clauses?
我有两个相关的表: Users
和Images
class User extends Model
{
public function images()
{
return $this->hasMany('App\Images');
}
}
class Image extends Model{
public function user()
{
return $this->belongsTo('App\User');
}
}
我正在尝试在名为thumbnails
的User
model 上添加第二种方法,这将允许我急切加载一组特定的用户Images
,而无需先加载所有用户图像。 这是逻辑:
public function thumbnails () {
return $this->hasMany('App\Images')
->selectRaw('src, user_id')
->where('processed', true)
->limit(3);
}
这是我一直在称这种关系的方式:
$posts = Post::with(['user','user.thumbnails'])->get();
使用debugbar ,我正在检查查询:
"sql": "select src, user_id from \"images\" where \"processed\" = 1 and \"images\".\"user_id\" in (12, 14, 15) limit 3",
这只会返回user.thumbnails
第一个Post
model。 我的thumbnails
方法有问题吗?
您可以在内部查询中调用 scope。
class User extends Model{
public function scopeThumbnails($query)
{
return $query->where('processed', true)
->limit(3);
}
}
在你的 controller
$posts = Post::with(['user' => function($query) {
$query->thumbnails();
}])->get();
您的limit
调用不是将 1 个用户的图像限制为 3 个,而是将所有帖子用户图像的整个查询限制为 3 个。它只会为所有用户找到 3 个总图像。
您现在可以删除该limit
:
public function thumbnails()
{
return $this->images()->where('processed', true);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.