2016-02-23 74 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,而不是一个模型。

相关问题