我一直在使用Eloquent ORM已经有一段时间了,我知道它非常好,但我不能做到以下几点,而在Fluent中很容易做到.
我的用户有多对多的歌曲,中间表是song_user(就像它应该的那样).根据播放次数判断,我想获得用户的热门歌曲.当然,播放计数存储在中间表中.
我可以用Fluent做到:
$songs = DB::table('songs')
->join('song_user', 'songs.id', '=', 'song_user.song_id')
->where('song_user.user_id', '=', $user->id)
->orderBy("song_user.play_count", "desc")
->get();
Run Code Online (Sandbox Code Playgroud)
简单.但我想在Eloquent中做到这一点,当然这不起作用:
$songs = Song::
with(array("song_user" => function($query) use ($user) {
$query->where("user_id", "=", $user->id)->orderBy("play_count", "desc");
}))
Run Code Online (Sandbox Code Playgroud) 我有产品和库存表;
制品
id int
name varchar
created_at timestamp
Run Code Online (Sandbox Code Playgroud)
个股
id int
name varchar
product_id varchar
created_at timestamp
Run Code Online (Sandbox Code Playgroud)
产品型号
public function validStock() {
return $this->hasMany('Stock')->where('quantity', '>', 10);
}
Run Code Online (Sandbox Code Playgroud)
如果两者都有created_at,如何通过stock的created_at订购,我尝试了两种方法,但它不起作用
Product::with('validStock')->orderBy('validStock.created_at', 'DESC');
Product::with(array('validStock' => function($q) {
$q->orderBy('created_at', 'DESC');
}));
Run Code Online (Sandbox Code Playgroud)