2016-02-23 111 views
1

我試圖調用模型中的一個方法,在我的觀點,但我正在跟此錯誤:Laravel 5 - 調用未定義的方法

Call to undefined method Illuminate\Database\Query\Builder::hasLogo() (View: /Users/Documents/audit/resources/views/misc/logo.blade.php)

型號:(網站)

public function hasLogo() 
    { 
    return File::exists(public_path($this->logo->url())); 
    } 

控制器:(HomeController.php)

public function showLogo() 
    { 
    $sites = Site::where('user_id', Auth::id()); 
    return View::make('misc.logo')->with(['sites' => $sites]); 
    } 

查看:logo.blade.php

@if ($sites->hasLogo()) 

<img src="<?= $sites->logo->url('medium') ?>" alt="<?= $sites->name ?>" 
      class="img-rounded col-md-12" style="padding-bottom: 20px;"> 

@endif 

我不清楚爲什麼它不能找到Site模型中的這種方法。非常感謝您的幫助。

回答

4

你沒有檢索任何東西。這就是你現在所擁有的:

$sites = Site::where('user_id', Auth::id()); 

這只是準備查詢。直到調用像first()get()等方法您還沒有獲取任何東西那麼,試試這個來代替:

$sites = Site::where('user_id', Auth::id())->firstOrFail(); 

firstOrFail()也將獲取只有一個站點。如果您想要獲取符合要求的所有網站,則需要使用get(),然後循環訪問網站。根據您的需要

$sites = Site::where('user_id', Auth::id())->get(); 

呼叫get()first()

$sites = Site::where('user_id', Auth::id())->get(); 
foreach ($sites as $site) 
{ 
    if ($site->hasLogo()) 
    { 
     // etc. 
    } 
} 
0

這裏完成查詢。

現在您可以調用您的自定義方法。

0
$sites = Site::where('user_id', Auth::id()); 

應該

$sites = Site::where('user_id', Auth::id())->get(); // ->get() the data 

foreach($sites as $site) { 
    if($site->hasLogo()) { 
     // do stuff 
    } 
} 

如果你不叫get(),它仍然會是一個查詢生成器對象。如果您致電hasLogo()logo()$sites,它將失敗,因爲這是一個eloquent collection,而不是一個模型。

相關問題