首页 > 解决方案 > Laravel 错误:方法 Illuminate\Database\Query\Builder::show 不存在

问题描述

在 Laravel 5.6 刀片/视图中调用控制器函数时,我收到以下错误消息。

方法 Illuminate\Database\Query\Builder::show 不存在

我找不到错误或此错误的来源。我在这里阅读了数十篇同样错误的帖子,但没有一篇与我拥有的模型/控制器(...)的代码/上下文/类型相关。

显示错误消息的刀片视图。

@foreach (\App\Portfolio::show() as $port)
    <option value="{{$port->id_portfolio}}">{{$port->name}}</option>
@endforeach

控制器

class PortfolioController extends Controller
{
    public function show()
    {
        $portfolio = \App\Portfolio::where([
            ['flg_active', '=', true],
            ['id_user', '=', Auth::user()->id]
        ])->get();

        return $portfolio;
    }
}

模型

class Portfolio extends Model
{
    public function transaction()
    {
        return $this->hasMany('App\Transaction', 'id_portfolio', 'id_portfolio');
    }

    public function user()
    {
        return $this->belongsTo('App\User', 'id_user', 'id');
    }
}

使用 all() 而不是 show() 进行测试,它可以工作。

标签: phplaraveleloquentlaravel-5.6

解决方案


Blade中,您调用模型。而你需要的方法在控制器 PortfolioController

投资组合控制器

public static function show()

@foreach (\App\PortfolioController ::show() as $port)
   <option value="{{$port->id_portfolio}}">{{$port->name}}</option>
@endforeach

推荐阅读