我已经阅读了有关此主题的多个问题,但对我没有用。 Link
我有两个模型产品,价格与产品之间的价格存在着很多关系。 在产品模型中:
public function price()
{
return $this->hasMany("App\Price","product_id","id");
}
我要按价格对产品集合进行排序。在我的价格模型中,我具有价格属性。这是我的代码,用于按价格关系和价格属性对产品集合进行排序。
$products=Product::find($id);
$products->load(['price'=>function($q){
$q->orderBy('price', 'asc');
}]);
dd($products->toArray());
请帮助我。谢谢。
答案 0 :(得分:0)
您可以尝试以下方法吗?
$product = Product::with('price', function($query){
$query->orderBy('price', 'asc');
})->find('id');
dd($product);
或以下利用集合的内容
$product = Product::find($id);
$sorted = $product->price->sortBy('price');
dd($sorted);
答案 1 :(得分:0)
在产品型号中:
public function price()
{
return $this->hasMany("App\Price","product_id","id")->orderBy('price', 'asc');
}
这可能不是正确的方法。但效果很好。
我做了两次迁移的两个模型。
products table
_ _ _ _ _ _
| id | name |
+-----------+
prices table
_ _ _ _ _ _ _ _ _ _ _ _ _
| id | product_id | price |
+-------------------------+
然后,我确保模型具有可填充属性。
on Product.php
protected $fillable = ['name'];
on Price.php
protected $fillable = ['product_id', 'price'];
然后在产品模型上建立关系。
on Product.php
public function prices()
{
return $this->hasMany(Price::class, 'product_id', 'id')->orderBy('price', 'asc');
}
然后我调用输出。
$products = App\Product::with('prices')->get();
这给了我上述问题的升序的欲望。 重新检查这些部分,
1. you made your migrations properly.
2. you made the relations properly (check that data comes.).
3. you called them properly.
答案 2 :(得分:-1)
最后我找到了解决方法。
现在我可以根据价格集合对产品集合进行排序了。
$products=Product::find($id);
$products=$products->load("price");
$products=$products->sortBy(function($product){
return $product->price;
});
dd($products->toArray());
感谢朋友的帮助。