Custom sorting on a laravel relationship collection

后端 未结 2 1007
旧巷少年郎
旧巷少年郎 2021-02-14 04:11

I\'m a little stuck on something that usually is quite straight forward. I need to sort records from a hasMany relationship into a custom order based on a certain value and an \

相关标签:
2条回答
  • 2021-02-14 04:35

    Your sorting will be applied only after you get the result while here $go = $this->hasMany('Product')->orderBy('colour','DESC'); you are just getting an instance of a class which will return can return your result if you apply a get method on it.

    For your purpose you have to use sortBy method of laravel collections after you get the result of your data you can find more (laravel Collection sortBy() method) & here is a similar question answer for you https://stackoverflow.com/a/28202985

    0 讨论(0)
  • 2021-02-14 04:36

    The usort equivalent for Collection is the sort() method. It takes a callback as a parameter and returns the sorted collection.

    So in your case, the solution is:

    $go = $go->sort(function ($a, $b) use ($order) {
      $pos_a = array_search($a->colour, $order);
      $pos_b = array_search($b->colour, $order);
      return $pos_a - $pos_b;
    });
    
    0 讨论(0)
提交回复
热议问题