【问题标题】:Laravel 5 - Call to undefined methodLaravel 5 - 调用未定义的方法
【发布时间】:2016-06-05 23:20:48
【问题描述】:

在我看来,我正在尝试在模型中调用一个方法,但我遇到了这个错误:

调用未定义的方法 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 模型中找不到此方法。非常感谢您的帮助。

【问题讨论】:

    标签: php laravel model laravel-5.2


    【解决方案1】:

    您没有检索任何内容。这就是你现在拥有的:

    $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.
        }
    }
    

    【讨论】:

      【解决方案2】:

      在这里完成您的查询:

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

      根据您的需要致电get()first()

      现在您可以调用您的自定义方法了。

      【讨论】:

        【解决方案3】:
        $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(),它仍然是一个查询构建器对象。如果您在$sites 上调用hasLogo()logo(),它将失败,因为那是eloquent collection,而不是模型。

        【讨论】:

          猜你喜欢
          • 2016-05-10
          • 1970-01-01
          • 2017-03-20
          • 2018-10-31
          • 2016-01-22
          • 2016-03-10
          • 2017-10-04
          • 2016-10-20
          • 1970-01-01
          相关资源
          最近更新 更多