2016-11-09 54 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所有者屬於公司 而且我試過這樣但現在它給了我這個錯誤 關係方法必須返回一個Illuminate \ Database \ Eloquent \ Relations \類型的對象 $ retails = Auth :: user() - > companies- >第一() - > 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()null –

+0

小修復答案:嘗試'auth() - > user()'not'auth ) - >用戶' –

+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行2697: 關係方法必須返回一個類型爲Illuminate \ Database \ Eloquent \ Relations \ Relation的對象 –

+0

我編輯了代碼,再試一次 –

+0

看起來這裏有一個'n + 1'的問題。我也不明白你爲什麼將零售轉換爲數組。 –

相關問題