我有产品和库存表;
制品
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)
在检索所有数据之后进行排序(在分页结果时无法以有效的方式进行排序),您可以使用连接.
(这个答案是基于这个.)
Product::with('validStock')
->join('stocks', 'stocks.product_id', '=', 'products.id')
->select('products.*') // Avoid selecting everything from the stocks table
->orderBy('stocks.created_at', 'DESC')
->get();
Run Code Online (Sandbox Code Playgroud)
我唯一不喜欢的是它带走了一些数据库抽象,因为你必须在这里编写你的表名.
请注意,我没有尝试过这个方向的hasMany关系,因为你在你的例子中有它(选择产品,每个产品都有很多股票).我只尝试过另一个方向的hasMany(例如选择股票,每个股票只有一个产品).
您应该在闭包中返回 $q :
Product::with(array('validStock' => function($q) {
return $q->orderBy('created_at', 'DESC');
}));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6056 次 |
| 最近记录: |