我试图在我的视图中调用模型中的方法,但是我遇到了这个错误:
调用未定义的方法Illuminate \ Database \ Query \ Builder :: hasLogo() (查看:/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
模型中找到此方法。非常感谢你的帮助。
答案 0 :(得分: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();
foreach ($sites as $site)
{
if ($site->hasLogo())
{
// etc.
}
}
答案 1 :(得分:0)
在此完成您的查询:
$sites = Site::where('user_id', Auth::id())->get();
根据您的需要致电get()
或first()
。
现在您可以调用自定义方法了。
答案 2 :(得分: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,而非模型。