简体   繁体   English

如何通过 Laravel 中的查询生成器获取唯一记录?

[英]How can I get unique records via query builder in Laravel?

I am new to Laravel, can anyone help me with this how should I get unique records through this query in laravel query builder?我是 Laravel 的新手,谁能帮我解决这个问题,我应该如何在 laravel 查询生成器中通过此查询获取唯一记录?

as of now, I'm getting duplicate records for example red, pink, red, pink, green截至目前,我得到了重复的记录,例如红色、粉色、红色、粉色、绿色

here is my query这是我的查询

MySQL query: MySQL查询:

select count(*) as aggregate from (select `product`.`id`, `name`, `category`.`category`, group_concat(product_synonyms.product_synonym)as product_synonym, group_concat(product_tags.product_tag) as product_tag from `product` left join `product_tags` on `product`.`id` = `product_tags`.`product_id` left join `category` on `category`.`id` = `product`.`category_id` left join `product_synonyms` on `product`.`id` = `product_synonyms`.`product_id` where `user_id` = 1 and `product`.`deleted_at` is null group by `product_tags`.`product_id`) as `aggregate_table`;

Query builder:查询生成器:

Product::leftJoin('product_tags', 'product.id', 'product_tags.product_id')
            ->leftJoin('category', 'category.id', 'product.category_id')
            ->leftJoin('product_synonyms', 'product.id', 'product_synonyms.product_id')
            ->where('user_id', auth()->user()->id)
            ->select('product.id', 'name','category.category',DB::raw('group_concat(product_synonyms.product_synonym)as product_synonym'),DB::raw('group_concat(product_tags.product_tag)) as product_tag')
            ->groupBy('product_tags.product_id')
            ->orderBy('product.name', 'ASC')
            ->paginate(10); 

I tried with different join and did many changes, seem I missing something and I couldn't figure it out, and ending with expecting something from a helping hand我尝试了不同的加入并做了很多改变,似乎我错过了一些东西,我无法弄清楚,并以期待帮助而结束

For get only one result in your query you need use:要在查询中只获得一个结果,您需要使用:

$productDetails = Product::leftJoin('product_tags', 'product.id', 'product_tags.product_id')
            ->leftJoin('category', 'category.id', 'product.category_id')
            ->leftJoin('product_synonyms', 'product.id', 'product_synonyms.product_id')
            ->where('user_id', auth()->user()->id)
            ->select('product.id', 'name','category.category',DB::raw('group_concat(product_synonyms.product_synonym)as product_synonym')**->first();**

for example.例如。

Paginate if you need more result of query.如果您需要更多查询结果,请分页。 If you need more than one result use ->get()如果您需要多个结果,请使用->get()

You can try this你可以试试这个

Product::leftJoin('product_tags', 'product.id', 'product_tags.product_id')
        ->leftJoin('category', 'category.id', 'product.category_id')
        ->leftJoin('product_synonyms', 'product.id', 'product_synonyms.product_id')
        ->where('user_id', auth()->user()->id)
        ->select('product.id', 'name','category.category',DB::raw('group_concat(product_synonyms.product_synonym)as product_synonym'),DB::raw('group_concat(product_tags.product_tag)) as product_tag')
         ->distinct()
        ->groupBy('product_tags.product_id')
        ->orderBy('product.name', 'ASC')
        ->paginate(10); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM