如何根据Laravel

时间:2017-03-28 04:39:19

标签: laravel

我有一个与第二个模型有“hasMany”关系的模型,它记录了前者的“投票”。然后我有一个方法可以被要求简单地计算投票数,如下所示:

class Car extends Model
{
    public function votes()
    {
        return $this->hasMany(Vote::class);
    }

    public function score()
    {
        return $this->votes->count();
    }
}

在我的控制器中,我想运行一个返回all()的查询,但是按score()排序...:

$cars = Car::all()->sortBy('score');

但这显然不起作用......我觉得我走在正确的轨道上,但不太知道如何使这项工作。会感激一些帮助。感谢。

2 个答案:

答案 0 :(得分:0)

代码应该是这样的:

$products = Shop\Product::join('shop_products_options as po', 'po.product_id', '=', 'products.id')
->orderBy('po.pinned', 'desc')
->select('products.*')       // just to avoid fetching anything from joined table
->with('options')         // if you need options data anyway
->paginate(5);

答案 1 :(得分:0)

试试这个解决方案:

 $cars = Car::with('votes')->get()->sortBy(function($car)
    {
        return $car->votes->count();
    });

希望它对你有所帮助:)。