Laravel 中的不同值

Distinct Values in Laravel

你好朋友我正在使用以下查询:

$cur_date = date('Y-m-d');
   $clientTemp = DB::table('clients')->where('quotations.exp_date','<',$cur_date)
     ->join('quotations','quotations.customer_id','=','clients.id')
      ->get()
       ->map(function ($clientTemp) {
        return [
            'id' => $clientTemp->id,
            'hash' => $clientTemp->hash,
            'name' => $clientTemp->first_name.' '.$clientTemp->last_name,
            'email' => $clientTemp->email,
            'mobile' => $clientTemp->mobile
        ];
    });

我从两个 table 中获取这些数据:

1. Qutoations2. Clients

在引号 table 中,如果 exp_date 早于当前日期,则将从 client table.

获取详细信息

但是有可能在引用 table 中有超过 1 行,但我只想从 customer_id 唯一的行中获取一个 table。如何从引号 table

中获取具有相同 customer_id 的唯一行

你应该使用 groupby

$cur_date = date('Y-m-d');    $clientTemp = DB::table('clients')->where('quotations.exp_date','<',$cur_date)
     ->join('quotations','quotations.customer_id','=','clients.id')
     ->->groupBy('quotations.customer_id')
      ->get()
       ->map(function ($clientTemp) {
        return [
            'id' => $clientTemp->id,
            'hash' => $clientTemp->hash,
            'name' => $clientTemp->first_name.' '.$clientTemp->last_name,
            'email' => $clientTemp->email,
            'mobile' => $clientTemp->mobile
        ];
    });

您需要使用 GROUP BY 子句,但由于 MySQL 的默认 ONLY_FULL_GROUP_BY 模式,您必须聚合任何具有多个值的列。

您似乎并没有实际使用引号中的任何值,因此您可以添加:

DB::table('clients')->select('clients.*')->groupBy('clients.id')...

否则,您需要告诉 MySQL 如何聚合具有多个值的任何行,例如:

DB::table('clients')->selectRaw('clients.*, MIN(quotations.id)')->groupBy('clients.id')...