我有两个相关的表: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');
}
}
我正在尝试在名为User
的{{1}}模型上添加第二种方法,这将使我渴望加载一组特定的用户thumbnails
,而不必加载所有用户首先要图片。这是逻辑:
Images
这就是我一直以来所说的这种关系:
public function thumbnails () {
return $this->hasMany('App\Images')
->selectRaw('src, user_id')
->where('processed', true)
->limit(3);
}
使用debugbar,我检查了查询:
$posts = Post::with(['user','user.thumbnails'])->get();
这仅返回"sql": "select src, user_id from \"images\" where \"processed\" = 1 and \"images\".\"user_id\" in (12, 14, 15) limit 3",
的第一个user.thumbnails
模型。我的Post
方法有问题吗?
答案 0 :(得分:0)
您可以在内部查询中调用作用域。
class User extends Model{
public function scopeThumbnails($query)
{
return $query->where('processed', true)
->limit(3);
}
}
在您的控制器中
$posts = Post::with(['user' => function($query) {
$query->thumbnails();
}])->get();
答案 1 :(得分:0)
您的limit
调用并没有将1个用户的图像限制为3个,而是将所有帖子的用户图像的整个查询限制为3个。它将仅为所有用户找到3张图像。 / p>
您可以暂时删除该limit
:
public function thumbnails()
{
return $this->images()->where('processed', true);
}