как я могу прочитать что-то из команды Laravel в свой контроллер

#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. Я обновил свой ответ, потому что в коде были некоторые ошибки.