Kri*_*sto 1 eager-loading laravel-4
我有 3 个模型
1 - 画廊
class Gallery extends \Eloquent {
public function media()
{
return $this->hasMany('Media');
}
}
Run Code Online (Sandbox Code Playgroud)
2- 媒体
class Media extends \Eloquent {
protected $table = 'media';
public function labels()
{
return $this->belongsTo('Label');
}
}
Run Code Online (Sandbox Code Playgroud)
3 - 标签
class Label extends \Eloquent {
public function media()
{
return $this->hasMany('Media');
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试加载包含所有媒体的特定图库。媒体应按相关标签分组并按标签名称列排序。
这不起作用:
$gallery = Gallery::with( [ 'media.labels' => function( $q )
{
$q->orderBy( 'name', 'desc' );
} ] )->where( 'name', 'Gallery1' )->first();
Run Code Online (Sandbox Code Playgroud)
举例说明如何对输出进行排序:
Gallery1
ALabel
Media1
Media2
BLabel
Media3
CLabel
Media4
Media5
Media6
Run Code Online (Sandbox Code Playgroud)
如果您只想按labels关系订购,这将起作用:
$gallery = Gallery::with(array(
'labels' => function ($query)
{ $query->orderBy('name', 'asc'); },
'labels.media'
))->first();
Run Code Online (Sandbox Code Playgroud)
如果您想控制嵌套关系的每个级别的排序(即labels按名称排序,并按media列排序media_name),您可以执行以下操作:
$gallery = Gallery::with(array(
'labels' => function ($query)
{ $query->orderBy('name', 'asc'); },
'labels.media' => function ($query)
{ $query->orderBy('media_name', 'asc'); }
))->first();
Run Code Online (Sandbox Code Playgroud)