Отличительные ценности в Laravel - PullRequest
0 голосов
/ 25 августа 2018

Здравствуйте, друзья! Я использую следующий запрос:

$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
        ];
    });

Я получаю эти данные из двух таблиц:

1. Qutoations и 2. Clients.

В таблице котировок, если exp_date меньше текущей даты, детали будут извлечены из client table.

Но есть вероятность, что в таблице котировок будет более 1 строки, но я хочу получить только одну таблицу из той, для которой customer_id уникален. Как я могу получить уникальную строку с тем же customer_id из таблицы предложений

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Вам нужно будет использовать предложение GROUP BY, но из-за режима Myly ONLY_FULL_GROUP_BY по умолчанию вы должны агрегировать любой столбец, имеющий более одного значения.

Похоже, вы на самом деле не используете никаких значенийиз цитат, так что вы можете просто добавить:

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

В противном случае вам нужно будет указать MySQL, как агрегировать любые строки, которые имеют несколько значений, например:

DB::table('clients')->selectRaw('clients.*, MIN(quotations.id)')->groupBy('clients.id')...
0 голосов
/ 25 августа 2018

Вы должны использовать 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
        ];
    });
...