如何将 Laravel 命令中的内容读入我的控制器
Posted
技术标签:
【中文标题】如何将 Laravel 命令中的内容读入我的控制器【英文标题】:how can I read something from Laravel command into my controller 【发布时间】:2021-11-03 00:45:04 【问题描述】:感谢告知,我创建了一个新的 laravel 命令,该命令会定期通过 schedule 函数运行。
在句柄函数中,我每天都在执行这个查询,我希望能够在我的控制器的 get 方法中检索变量主题。那么执行此操作的最佳方法是什么?
public function handle()
$topics = DB::table("sentences")
->select("topic")
->OrderByRaw("RAND()")
->distinct()
->limit(5)
->get();
echo($topics);
return 0;
【问题讨论】:
【参考方案1】:您在此处执行的命令与您的控制器之间没有链接。
没有办法在控制器中“检索”$topics
变量,它们在您的应用程序中是完全不同的实体。
我的猜测是您正在尝试缓存这些数据,以便您可以快速获取它们,而不会出现任何性能问题。
如果是这种情况,那么你很幸运,因为解决方案非常简单。
public function handle()
Cache::put('topics', function()
return DB::table("sentences")
->select("topic")
->OrderByRaw("RAND()")
->distinct()
->limit(5)
->get();
);
return 0;
然后,在您的应用程序的任何地方,您都可以通过以下方式检索主题:
$topics = Cache::get('topics');
这是一个基本示例,但它应该可以工作。但是,如果缓存不存在,Cache::get('topics')
将返回null
。
您可以通过检索主题来解决此问题:
$topics = Cache::rememberForever('topics', function()
return DB::table("sentences")
->select("topic")
->OrderByRaw("RAND()")
->distinct()
->limit(5)
->get();
);
// this way, if the cache doesn't exist, it'll be created.
// then your scheduled command will update it every day
【讨论】:
我更新了我的答案,因为代码有一些错误。【参考方案2】:$topics = DB::table("sentences")
->select("topic")
->OrderByRaw("RAND()")
->distinct()
->limit(5)
->pluck('id'); //pass only the array if ids
if($topics)
return redirect()->route('route.name.to.controller',['topics' => $topics]);
else
// do another action
【讨论】:
以上是关于如何将 Laravel 命令中的内容读入我的控制器的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5 - 如何从 Artisan 命令运行控制器方法?