通过hasMany关系对laravel集合进行排序

时间:2019-06-13 17:10:37

标签: php laravel eloquent

我已经阅读了有关此主题的多个问题,但对我没有用。 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());

请帮助我。谢谢。

3 个答案:

答案 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());

感谢朋友的帮助。