我有3个模特
1 - 图库
class Gallery extends \Eloquent {
public function media()
{
return $this->hasMany('Media');
}
}
2-媒体
class Media extends \Eloquent {
protected $table = 'media';
public function labels()
{
return $this->belongsTo('Label');
}
}
3 - 标签
class Label extends \Eloquent {
public function media()
{
return $this->hasMany('Media');
}
}
我正在尝试使用所有媒体加载特定的图库。媒体应按关联标签分组,并按标签名称列排序。
这不起作用:
$gallery = Gallery::with( [ 'media.labels' => function( $q )
{
$q->orderBy( 'name', 'desc' );
} ] )->where( 'name', 'Gallery1' )->first();
举例说明如何对输出进行排序:
Gallery1
ALabel
Media1
Media2
BLabel
Media3
CLabel
Media4
Media5
Media6
答案 0 :(得分:4)
如果您只想按labels
关系订购,这将有效:
$gallery = Gallery::with(array(
'labels' => function ($query)
{ $query->orderBy('name', 'asc'); },
'labels.media'
))->first();
如果您希望控制嵌套关系的每个级别的排序(即按名称对labels
进行排序,并按列{media
进行排序1}}),你可以这样做:
media_name
答案 1 :(得分:1)
如果你有更多的嵌套排序
$this->data['user_posts'] = User_posts::with(['likes', 'comments' => function($query) {
$query->orderBy('created_at', 'DESC');
},
'comments.replies' => function ($query) {
$query->orderBy('created_at', 'DESC'); }
])->where('status', 1)->orderBy('created_at', 'DESC')->get();
答案 2 :(得分:0)
您似乎需要将标签加入到图库中,然后按主要查询进行订购。