Laravel 4 拉威尔4号>;快速加载>;orderBy嵌套关系
我有三个模型 1-画廊Laravel 4 拉威尔4号>;快速加载>;orderBy嵌套关系,laravel-4,eager-loading,Laravel 4,Eager Loading,我有三个模型 1-画廊 class Gallery extends \Eloquent { public function media() { return $this->hasMany('Media'); } } 2-媒体 class Media extends \Eloquent { protected $table = 'media'; public function labels() { re
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
如果您只想按
标签
关系订购,这将起作用:
$gallery = Gallery::with(array(
'labels' => function ($query)
{ $query->orderBy('name', 'asc'); },
'labels.media'
))->first();
如果要控制嵌套关系的每一级排序(即按名称对标签进行排序,并按列对媒体进行排序),可以执行以下操作:
$gallery = Gallery::with(array(
'labels' => function ($query)
{ $query->orderBy('name', 'asc'); },
'labels.media' => function ($query)
{ $query->orderBy('media_name', 'asc'); }
))->first();
如果您只想按
标签
关系订购,这将起作用:
$gallery = Gallery::with(array(
'labels' => function ($query)
{ $query->orderBy('name', 'asc'); },
'labels.media'
))->first();
如果要控制嵌套关系的每一级排序(即按名称对标签进行排序,并按列对媒体进行排序),可以执行以下操作:
$gallery = Gallery::with(array(
'labels' => function ($query)
{ $query->orderBy('name', 'asc'); },
'labels.media' => function ($query)
{ $query->orderBy('media_name', 'asc'); }
))->first();
看起来您需要将标签加入到图库中,并对主查询进行排序
看起来您需要将标签加入到您的图库中,并对主查询进行排序
如果您有更多嵌套
$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();
如果您有更多嵌套的订单
$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();
如果标签与库无关,该怎么办?正如您在“我的模型”中看到的,媒体属于标签,而图库有许多媒体-有没有一种方法可以实现给定的输出示例,而不将标签与图库关联?如果标签与图库无关,该怎么办?正如您在我的模型中所看到的,媒体属于标签,而图库有许多媒体-有没有一种方法可以在不将标签与图库关联的情况下实现给定的输出示例?我认为您的
媒体属于('label')
是不正确的。这意味着每个媒体
只有一个标签
。相反,您应该使用belongTomany('Label')
,因为每个媒体
可能有多个标签。感谢您指出这一点。我的输出示例有点混乱,但它正是我想要的:每个媒体一次属于一个标签,而不是多个。我优化了输出示例我认为您的媒体属于('Label')
是不正确的。这意味着每个媒体
只有一个标签
。相反,您应该使用belongTomany('Label')
,因为每个媒体
可能有多个标签。感谢您指出这一点。我的输出示例有点混乱,但它正是我想要的:每个媒体一次属于一个标签,而不是多个。我优化了输出示例