Репликация сложного запроса MySQL/MariaDB с несколькими соединениями в Laravel DB BuilderPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Репликация сложного запроса MySQL/MariaDB с несколькими соединениями в Laravel DB Builder

Сообщение Anonymous »

У меня есть запрос с несколькими соединениями. Большинство объединений — 1 к 1, но два — 1 к человеку. Мой запрос sql возвращает результаты, как и ожидалось, с данными от 1 до многих соединений, сведенными в одно значение. Два соединения 1 ко многим — это оправдания и путешествие Вот мой запрос:

Код: Выделить всё

select
a.Lastn,
c.name,
GROUP_CONCAT(f.type,',',f.description) as Excuses,
GROUP_CONCAT(i.start,',', i.end,',', i.destination) as Travel
from
jurors as a left join
pool_lkp as b on a.id = b.j_id left join
pools as c on b.p_id = c.id left join
accommodations as d on a.id = d.juror_id left join
employment as e on a.id = e.juror_id left join
excuses as f on a.id = f.juror_id left join
new_address as g on a.id = g.juror_id left join
spouse as h on a.id = h.juror_id left join
travel as i on a.id = i.juror_id
where
c.id = 1
group by
a.id
Я попытался воссоздать это в Laravel, используя построитель запросов к базе данных. Данные от 1 до многих соединений повторяются несколько раз. Я подозреваю, что это связано с тем, что два соединения от 1 до многих возвращают несколько строк для одной записи, где эта строка имеет значения в двух таблицах от 1 до многих.
Вот моя попытка воспроизвести мою запрос с помощью построителя базы данных Laravel.

Код: Выделить всё

$results = DB::table('jurors')
->leftJoin('pool_lkp','jurors.id','=','pool_lkp.j_id')
->leftJoin('pools','pool_lkp.p_id','=','pools.id')
->leftJoin('accommodations','jurors.id','=','accommodations.juror_id')
->leftJoin('employment','jurors.id','=','employment.juror_id')
->leftJoin('excuses','jurors.id','=','excuses.juror_id')
->leftJoin('new_address','jurors.id','=','new_address.juror_id')
->leftJoin('spouse','jurors.id','=','spouse.juror_id')
->leftJoin('travel','jurors.id','=','travel.juror_id')
->select(
'jurors.id as jurorId',
'jurors.*',
'pools.*',
DB::raw("GROUP_CONCAT(excuses.type,',',excuses.description) as Excuses"),
DB::raw("GROUP_CONCAT(travel.start,',', travel.end,',', travel.destination) as Travel")
)
->where('pools.id','=',$request->segment(3))
->groupBy('jurors.id')
->get();
Я ожидал увидеть данные для таблиц от 1 до многих, сведенные в строку в Excuses and Travel в возвращаемых результатах. Я вижу сглаженные строки в результатах, возвращаемых по запросу Laravel DB Builder, но строки повторяются несколько раз.
Есть ли ошибка в Laravel DB Builder?

Подробнее здесь: https://stackoverflow.com/questions/786 ... -db-builde
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»