#laravel #laravel-5 #model-view-controller #eloquent #laravel-4
Вопрос:
Спасибо, что сообщили, что я создал новую команду laravel, которая периодически запускается через функцию расписания.
Здесь, в функции дескриптора, я выполняю этот запрос каждый день, и я хочу иметь возможность извлекать переменные темы в методе get в моем контроллере. Так как же лучше всего это сделать?
public function handle()
{
$topics = DB::table("sentences")
->select("topic")
->OrderByRaw("RAND()")
->distinct()
->limit(5)
->get();
echo($topics);
return 0;
}
Ответ №1:
$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
Ответ №2:
Нет никакой связи между командой, которую вы выполняете здесь, и вашими контроллерами.
Нет никаких способов «извлечь» $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
Комментарии:
1. Я обновил свой ответ, потому что в коде были некоторые ошибки.