在 laravel 中使用任务计划每天更新查询

updating query every day using task scheduling in laravel

我正在尝试使用 laravel 任务计划程序每天更新一个查询。我目前有一个家庭控制器,我在其中 select 点赞最多的图片并将结果传递到我的主页。我还开始了一项 windows 任务,它每分钟调用我的 laravel 时间表。

家庭控制器:

$foodOfTheDay = Picture::withCount('likes')
    ->where('picture_type', 'food')
    ->orderBy('likes_count', 'desc')
    ->with('user')
    ->first();

$drinkOfTheDay = Picture::withCount('likes')
    ->where('picture_type', 'drink')
    ->orderBy('likes_count', 'desc')
    ->with('user')
    ->first();

return view('timeline.index', [
            'users' => $users,
            'pictures' => $pictures,
            'comments' => $comments,
            'foodOfTheDay' => $foodOfTheDay,               
            'drinkOfTheDay' => $drinkOfTheDay,
        ]);

日程安排:

protected function schedule(Schedule $schedule)
{
    // $schedule->command('inspire')->hourly();

   $schedule->call('\App\Http\Controllers\HomeController@petsOfDay')->daily();
}

我想知道如何从我的日程安排中更新当天的食物和饮料变量,同时让我的主视图可以访问它们。

感谢您的帮助。

首先,您需要使用 php artisan make:command YourCommandName 创建一个命令。这会在 app/Console/Commands/.

中创建一个文件

在新创建的命令文件中,将 $signature 更改为有用的内容。另外,在 handle() 方法中,在那里写下你的逻辑。

接下来,您必须在 app/Console/Kernel.php 中的 $commands 数组中注册命令。

最后,在 app/Console/Kernel.phpschedule() 方法中,使用频率调用您的命令,例如 $schedule->call('command:signature')->daily();

PS:假设您已经在服务器上设置了一个每分钟运行一次的 corn 作业。

要解决此问题,请创建一个新数据库 table 来存储当天的图片。然后,创建一个 artisan 命令来上传食物和饮料变量。在时间表中,每天更新 artisan 命令。最后,在控制器中编写一个查询,从当天的图片中为每个类别选择最近的结果 table,并将该查询的结果传递给视图。