2016-11-09 6 views
0

Привет, я пытаюсь получить мои объекты на laravel, как это.

Но я получаю эту ошибку.

PHP error: Undefined property: Illuminate\Database\Eloquent\Collection::$retails on line 18 

Также это мой код.

public function index(){ 
     $retails = Auth::user()->companies->retails->all(); 


     return view('retails/retails', compact('retails')); 
    } 

Компания Модель

class Company extends Model 
{ 
    public function retails(){ 
     $this->hasMany(Retail::class); 
    } 
} 

Розничная модель

class Retail extends Model 
{ 
    public function company(){ 
    return $this->belongsTo(Company::class); 
    } 
} 
+0

Что такое 'компании' и' продает в розницу' здесь ... и как они связаны? –

+0

Компания имеет много магазинов также ret Айыл belongsto компания И я пытался, как это, но теперь его дает мне эту ошибку метод отношений должен возвращать объект типа Осветите \ Database \ красноречивый \ отношений \ Relation $ продается = Auth :: пользователя() -> компаний- > первый() -> retails-> все(); –

+0

Вы можете показать свой код отношений? – Tiger

ответ

3

У вас есть много компаний. Вот почему вы получите коллекцию из

Auth::user()->companies

При вызове ->retails из экземпляра коллекции, вы получите исключение вы написали.

Вы должны с нетерпением загружать компании в розницу, а затем проходить через них.

Как:

$u = auth()->user(); 
$u->load('companies.retails'); 

$userRetails = []; 
$u->companies->each(function($company) use (&$userRetails) { 
    $userRetails = array_merge($userRetails, $company->retails->toArray()); 
}); 

$userRetails = collect($userRetails); 
return view('retails/retails', compact('userRetails')); 
+0

Я получаю эту ошибку @HilmiErdemKEREN Вызов функции-члена addEagerConstraints() по нуле –

+0

Небольшое исправление ответа: Попробуйте 'auth() -> user()' not 'auth () -> user' –

+0

все еще такая же ошибка –

0

В соответствии с вашим кодом, вы пытаетесь получить доступ к коллекции из коллекции, которую невозможно, вы должны индивидуально принести сбор первой и сделать ваш процесс

public function index(){ 
    $companies = Auth::user()->companies; 


    foreach($companies as $company) { 
     $retails_arr[] = $company->retails; 
    } 

    $retails = collect($retails_arr); // Gives Collection or 
    // Or if you want to send array, try this 
    $retails = $retails_arr; // Gives Array 


    return view('retails/retails', compact('retails')); 
} 

Попробуйте это, надеюсь, это поможет.

+0

Я пробовал свой код, но я получаю эту ошибку LogicException в Model.php line 2697: Метод связи должен возвращать объект типа Illuminate \ Database \ Eloquent \ Relations \ Relation –

+0

Я редактировал код, повторите попытку –

+0

Похоже, здесь есть проблема с n + 1. Я также не понимал, почему вы переводили розничные продажи в массив. –

Смежные вопросы