限制Laravel中的重复查询

时间:2018-08-08 17:36:58

标签: php mysql laravel

我只需要查询中的最新5行,因此我可以使用

$view->with('recent', Transaction::SELECT('amount')
->latest()
->where('amount', '!=', null)
->take(5)->get());

这给了我我所需的信息,但是DeBug Bar指出:

14 statements were executed, 14 of which were duplicated

我目前在该表中有14条记录。我在表中添加的记录越多,得到的重复项就越多。

如何减少这些查询?

目前这样称呼它:

       @foreach($recent as $rec)
        <li>{{ number_format($rec->amount / 100, 2) }}</li>
        @endforeach

1 个答案:

答案 0 :(得分:1)

尝试

将'change.to.footer'更改为footer.blade.php路径

将\ App \ Transaction更改为您的模型路径

class AppServiceProvider extends ServiceProvider
{
    /**
    * Bootstrap any application services.
    *
    * @return void
    */
    public function boot()
    {
        view()->composer('change.to.footer', function ($view) {
            $view->with('recent', \App\Transaction::SELECT('amount')
                        ->latest()
                        ->where('amount', '!=', null)
                        ->take(5)->get());
        });
    }

    /**
    * Register any application services.
    *
    * @return void
    */
    public function register()
    {
        //
    }
}

如果要在所有刀片中使用该变量,

也许您可以制作模型方法

// Transaction model
public static function recent()
{
    return static::SELECT('amount')
                ->latest()
                ->where('amount', '!=', null)
                ->take(5)->get());
}

制作视图作曲家

    public function boot()
    {
        view()->share('recent', \App\Transaction::recent());
    }