У меня есть запрос с несколькими соединениями. Большинство объединений — 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?
У меня есть запрос с несколькими соединениями. Большинство объединений — 1 к 1, но два — 1 к человеку. Мой запрос sql возвращает результаты, как и ожидалось, с данными от 1 до многих соединений, сведенными в одно значение. Два соединения 1 ко многим — это оправдания и путешествие Вот мой запрос: [code]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 [/code] Я попытался воссоздать это в Laravel, используя построитель запросов к базе данных. Данные от 1 до многих соединений повторяются несколько раз. Я подозреваю, что это связано с тем, что два соединения от 1 до многих возвращают несколько строк для одной записи, где эта строка имеет значения в двух таблицах от 1 до многих. Вот моя попытка воспроизвести мою запрос с помощью построителя базы данных Laravel. [code]$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(); [/code] Я ожидал увидеть данные для таблиц от 1 до многих, сведенные в строку в Excuses and Travel в возвращаемых результатах. Я вижу сглаженные строки в результатах, возвращаемых по запросу Laravel DB Builder, но строки повторяются несколько раз. Есть ли ошибка в Laravel DB Builder?