У меня есть отношения между двумя моделями. Вместо того, чтобы делать @foreach для просмотра каждого дочернего элемента в представлении, я хочу получить доступ к каждому ребенку вручную в зависимости от состояния, но не знаю, как этого добиться.Доступ к ребенку в модели
Родитель модель сниппет
public function childs()
{
return $this->hasMany('Child');
}
Детский модель фрагмент
public function parent()
{
return $this->belongsTo('Parent');
}
view.blade.php
@foreach ($parents as $parent)
@if ($parent->childs()->count() == 2)
{{ $parent->find(1)->childs()->where('corner', '=', 'A')->first()->id }}
and
{{ $parent->find(1)->childs()->where('corner', '=', 'B')->first()->id }}
@endif
@endforeach
Причина, почему я хочу сделать это, потому что всегда будет только 2 ребенка, я хочу показать их в определенном порядке, и я хочу поставить «и» слово между ними.
С этим случается, что это приводит к тому, что первый результат всех дочерних элементов в таблице соответствует условию, а не только дочерний элемент, который принадлежит выбранному родительскому элементу, который соответствует условию. Причина, по которой я помещаю first(), состоит в том, что я возвращаю несколько результатов, но на самом деле будет только один ребенок, который удовлетворяет условию.
Я уверен, что я слишком усложняю его, и должен быть более простой способ.
Спасибо за помощь!
Из ответа Mudonat это то, что я и сделал.
Родитель модель фрагмент
public function childs()
{
return $this->hasMany('Child');
}
детская модель SNIPPET
public function parent()
{
return $this->belongsTo('Parent');
}
public function scopeCorner($query, $corner)
{
return $query->whereCorner($corner)->first();
}
view.blade.php
@foreach ($parents as $parent)
@if ($parent->childs()->count() == 2)
{{ $parent->childs()->corner('A')->id }}
and
{{ $parent->childs()->corner('B')->id }}
@endif
@endforeach
Это работает. Это просто кажется неэффективным. У меня уже есть родительская модель, загруженная в память, и у этого должен быть ребенок уже, зачем идти на запрос? – gonza182
Eloquent не делает запросы на соединение. Он делает запросы, когда им нужно. Лучше перенести подобные действия на класс модели. Я рекомендовал области, потому что, по крайней мере, с ними, код будет немного понятнее. – mudonat
Спасибо за ваш ответ. У меня нет достаточного количества голосов, чтобы проголосовать за ответ. – gonza182