Несколько вещей, чтобы упомянуть. Во-первых, вызов ваших отношений eleves
в форме блэйда выглядит следующим образом:
$retour->eleves()
будет возвращаться к базе данных при каждом отдельном вызове. Это может привести к большой задержке, если у вас много retour
объектов или даже если вы просто просматриваете эту таблицу.
Настоятельно рекомендуем загружать как можно больше, по крайней мере на retour
коллекция.
На вашем контроллере :
// Not sure if you had any constraints, but this will eager load eleves
$retours = Retour::with('eleves')->get();
Проблема с тем, что вы всегда тянете одну и ту же дату, заключается в том, что вы возможно тянете с одного и того же объекта,Я люблю хорошую цепь ... но иногда более длинные цепи становятся более запутанными, чем они того стоят. Взгляните на эту строку:
$retour->eleves()->first()->cours()->first()->date_seance
Если вы прервете это только из первого цикла на своей странице блейда, вы вытяните первый eleves
из этого первого retour
объекта из всей коллекции. из retour
объектов. Затем вы вытягиваете первый cours
объект из этого первого eleves
из этого первого retour
объекта. Причина, по которой дата совпадает, заключается в том, что вы , возможно, тянете тот же cours
объект. Возможно, я говорю, потому что метод first()
просто извлекает первый экземпляр, связанный с объектом retour
в базе данных. Не последний , просто первый. Таким образом, если есть несколько eleves
для каждого retour
, если тот, у которого, скажем, id
из 1, присоединен как к первому, так и ко второму retour
, вы вытягиваете тот же самый точный eleves
во второмпетля. Это дополнительно усугубляется точно такой же проблемой отношения cours
с eleves
. Если вы скажете cours
с id
из 21, присоединенным к нескольким eleves
, вы могли бы тянуть точно такой же cours
, даже если вы находитесь на совершенно разных циклах для обоих retour
и eleves
.
Чтобы это исправить, вам нужно иметь твердую ручку на , которая eleves
и , на которую cours
объекты вы ссылаетесьв вашей петле. Я бы порекомендовал не делать запросы на верхнем уровне (retours
), а скорее иметь пару запросов более низкого уровня по этим отношениям (eleves
или cours
) и выполнять цикл непосредственно для тех, кто находится в вашем блейде.
Например, в вашем контроллере :
$courses = Cours::where('some constraint', $someConstrainer)->get()
Затем в вашем блейде , просто цикл в коллекции $courses
:
@foreach($courses as $cours){
// Other stuff here...
<td> {{ $cours->first()->date_seance->format('d/m/Y') }}</td>
Если вы не можете сделать это на уровне cours
, возможно, вернитесь на один уровень выше и загрузите с помощью eleves
(одновременно стремясь загрузить объекты cours
).