您好我在尝试按关系属性对集合进行排序。
这是我的模特
class Song extends \Eloquent {
protected $fillable = ['title', 'year'];
public function artist(){
return $this->hasOne('Artist','id', 'artist_id');
}
}
class SongDance extends \Eloquent {
protected $table = 'song_dances';
protected $fillable = ['rating'];
public function dance(){
return $this->belongsTo('Dance', 'dance_id');
}
public function song(){
return $this->belongsTo('Song', 'song_id');
}
}
class Dance extends \Eloquent {
protected $fillable = ['name'];
public function song_dances(){
return $this->hasMany('SongDance','dance_id','id');
}
public function songs(){
return $this->belongsToMany('Song', 'song_dances', 'dance_id', 'song_id');
}
}
这就是我现在的距离:
$dance = Dance::find(1);
$songs = $dance->songs()
->with('artist')->whereHas('artist', function ($query) {
$query->where('urlName','LIKE','%robbie%');})
->where('song_dances.rating', '=', $rating)
->orderBy('songs.title','asc')
->where('songs.year', '=', 2012)
->get();
是的,我只是可以在查询中添加 - > sortBy(' artist.name'); ,但结果集可能非常大(约6000项)因此我更喜欢数据库分类。
有可能这样做吗?
答案 0 :(得分:1)
由于Eloquent的关系都是单独查询的(不是JOIN
s),因此无法在数据库层中实现所需。您唯一能做的就是在应用程序代码中对集合进行排序,您已经解雇了该集合。
如果您觉得必须在数据库中对其进行排序,那么您应该编写自己的连接查询,而不是依赖于Eloquent的关系。