Laravel - перенести update из SQL в querybuilder

195
09 января 2020, 15:30

Имею следующий SQL запрос:

update LOW_PRIORITY zoho_contacts z
inner join
(select contactid,  min(due_date) as mini_date
from zoho_invoices
where deleted_at is null and due_date is not null and summa_oplaty > 0
group by contactid ) co using (contactid)
set z.data_pervoy_pokupki = co.mini_date
where z.contactid = co.contactid AND z.data_pervoy_pokupki IS null

пытаюсь переписать его в синтаксисе QB:

DB::table('zoho_contacts z')
->innerJoin(DB::table('zoho_invoices')
->select(DB::raw('contactid,  min(due_date) as mini_date'))
->whereNull('deleted_at')
->whereNotNull('due_date')
->where('summa_oplaty', '>', 0)
->groupBy('contactid') . ' as co', 'z.contactid', 'co.contactid' )
->update(['z.data_pervoy_pokupki' => 'co.mini_date'])
->where('z.contactid', 'co.contactid')
->whereNull('z.data_pervoy_pokupki');
dd(DB::getQueryLog());

Получаю ошибку:

Object of class Illuminate\Database\Query\Builder could not be converted to string которая указывает на строку ->groupBy('contactid') . ' as co', 'z.contactid', 'co.contactid' )

думаю, что это относится к

' as co'

Подскажите плз - куда это ' as co' правильно пристроить?

Зачем мне это ' as co'? Это алиас таблицы, которую нужно "приджойнить"... По-другому не придумал. В обычном запросе оно работает.

Answer 1

решение найдено с помощью ментора:

DB::table('zoho_contacts')
    ->join(DB::raw("(select contactid,  min(due_date) as mini_date from zoho_invoices
    where deleted_at is null and due_date is not null and summa_oplaty > 0
    group by contactid ) co"),"zoho_contacts.contactid","=","co.contactid")
        ->where('zoho_contacts.contactid', 'co.contactid')
        ->whereNull('zoho_contacts.data_pervoy_pokupki')
        ->update(['zoho_contacts.data_pervoy_pokupki' => 'co.mini_date']) ;

пришлось распрощаться с алисом 'z' для 1-й таблицы - заменить его на полное имя и большую часть запроса поместить в DB::raw, но это работает и это хорошо!

READ ALSO
Curl парсер валют

Curl парсер валют

Почему выдает stdClass Object ( [statusCode] => 404 [error] => Not Found [message] => Cannot POST /api/quotesTick?m=json&q=USDRUR,EURRUR,gold,silver ) , хотя если в браузер вставить то выдает курсы

124
Вход на сайт с помощью facebook

Вход на сайт с помощью facebook

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

133
Почему не работает is_page Wordpress?

Почему не работает is_page Wordpress?

Требуется сделать так чтобы человек который пришел на сайт мог просмотреть только первый ролик из всех, на данный момент они делятся на Episode...

121
Почему Yii2 не видит виджет, и как это исправить?

Почему Yii2 не видит виджет, и как это исправить?

Столкнулся с бедой после переезда на другой VDS сервер стал ошибки выводить о том что нет такого виджета

167