Доступ к ребенку в модели

0

У меня есть отношения между двумя моделями. Вместо того, чтобы делать @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 
Теги:
laravel-4
blade

1 ответ

0
Лучший ответ

Вы можете использовать области, чтобы сделать их немного проще. http://laravel.com/docs/4.2/eloquent#query-scopes

  • 0
    Это работает. Это просто кажется неэффективным. У меня уже есть родительская модель, загруженная в память, и у нее уже должен быть ребенок, зачем идти делать запрос?
  • 0
    Eloquent не делает запросы на присоединение. Он делает запросы, когда они нужны. Такого рода действия лучше перенести в класс моделей. Я рекомендовал области видимости, потому что, по крайней мере с ними, код будет немного более понятным.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню