Custom sorting on a laravel relationship collection
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;});
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