@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()
  • Вопрос задан
  • 81 просмотр
Решения вопроса 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 избавиться пока не поздно.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
28 февр. 2021, в 01:35
200000 руб./за проект
28 февр. 2021, в 00:22
2500 руб./за проект
27 февр. 2021, в 22:14
30000 руб./за проект