我有产品和库存表;
产品
id int
name varchar
created_at timestamp
股
id int
name varchar
product_id varchar
created_at timestamp
产品型号
public function validStock() {
return $this->hasMany('Stock')->where('quantity', '>', 10);
}
如果两者都有created_at,如何通过stock的created_at订购,我尝试了两种方法,但它不起作用
Product::with('validStock')->orderBy('validStock.created_at', 'DESC');
Product::with(array('validStock' => function($q) {
$q->orderBy('created_at', 'DESC');
}));
答案 0 :(得分:6)
不是在检索所有数据后进行排序(在分页结果时无法以有效的方式进行排序),您可以使用连接。
(此答案基于this one。)
@IBAction func dismissKeyboardButton(sender: AnyObject) {
view.endEditing(true)
}
我唯一不喜欢的是它取消了一些数据库抽象,因为你必须在这里编写你的表名。
请注意,我没有尝试过这个方向的hasMany关系,就像你在你的例子中那样(选择产品,每个产品都有很多股票)。我只尝试过hasMany在另一个方向(例如选择股票,每个股票只有一个产品)。
答案 1 :(得分:1)
在Laravel中查询急切加载的关系时,无法应用订单。您可以在执行查询后订购集合。
$products = Product::with(array('validStock'))
->get()
->each(function ($product)
{
$product->validStock = $product->validStock
->sortBy(function ($validStock)
{
return $validStock->created_at;
})
->reverse();
});
答案 2 :(得分:0)
你应该在闭包中返回$ q:
Product::with(array('validStock' => function($q) {
return $q->orderBy('created_at', 'DESC');
}));