【问题标题】:Laravel Eloquent - Get most popular product from summariesLaravel Eloquent - 从摘要中获取最受欢迎的产品
【发布时间】:2021-06-21 14:30:31
【问题描述】:

我正在尝试获取我所有摘要中最受欢迎的产品。可取所有摘要中最常见的产品名称。

我有一个汇总表和一个产品表,中间有一个数据透视表。

关系如下:

产品型号

public function summaries()
    {
        return $this->belongsToMany(Summary::class, 'product_summary', 'summary_id','product_id');
    }

汇总模型

public function products()
    {
        return $this->belongsToMany(Product::class, 'product_summary', 'summary_id','product_id');
    }

所以当我们说数据库中的所有摘要时,它们中的大多数都将产品 A 作为产品。我想检索产品 A 的名称或对象,以便知道最常见的产品。

我似乎无法让它工作。我试过像

$product = Summary::query()
    ->with(array('products' => function($query) {
        $query->groupBy('name')->select('name');
    }))
    ->get();

或者

$top = Summary::select()->with('products')
->get()->sortByDesc(function($item){
    $item->name;
})->take(1)->get();

但它只是不起作用。我做错了什么?

【问题讨论】:

  • “它不起作用”是什么意思?有错误信息吗?

标签: php database laravel eloquent


【解决方案1】:

你们的关系不对。编辑如下:

产品型号

public function summaries()
    {
        return $this->belongsToMany(Summery::class, 'product_summary', 'product_id', 'summary_id');
    }

然后在您的控制器中,您可以获得具有最多摘要的产品,如下所示:

$product = Product::withCount('summaries')->orderBy('summaries_count', 'desc')->first();

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 2021-02-20
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    相关资源
    最近更新 更多