Задать вопрос
@Yariy

Почему возникает ошибка Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsTo::stores()?

Есть две модели: склад и филиал.
У филиала может быть много складов. Соответственно у Филиала в модели есть
public function stores(){
        return $this->hasMany('App\Store');
    }

У склада:
public function branch()
    {
        return $this->belongsTo('App\Branch');
    }

Но почему-то, если я вызываю у склада
public function getStoresOfParentBranch(){
        return $this->branch()->stores();
    }

Возникает ошибка Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsTo::stores()
  • Вопрос задан
  • 1579 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
GogElf
@GogElf
Хокаге
Потому что $this->branch() выдает \Illuminate\Database\Eloquent\Relations\BelongsTo, а не модель
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@jazzus
Так никто не вызывает отношения. С этим методом getStoresOfParentBranch может возникнуть куча проблем. От тысяч одинаковых запросов к бд до ошибок.

Правильно делать так.

Если отношение вызывается один раз, то пишем сразу в контроллере/шаблоне.

$store->branch->stores;

Но НЕ в модели.

Если планируются циклы или коллекции json ресурсов, или просто >1 вызовов отношения то вначале цепляем через with

Store::with('branch.stores')
    ->get();

и потом уже юзать $store->branch->stores без запросов к бд, сколько бы элементов в коллекции не было. Хотя я бы по другому сделал. Но грузить не буду. Для начала хватит от getStoresOfParentBranch избавиться пока не поздно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы