У меня есть отношения между двумя моделями. Вместо того, чтобы делать @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');
}
Детский фрагмент модели
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
Вы можете использовать области, чтобы сделать их немного проще. http://laravel.com/docs/4.2/eloquent#query-scopes