2017-01-29 1 views
2

Удовлетворительный вопрос что-то вроде этогоКак получить доступ к данным из одной функции в другую Laravel

У меня есть функция в AController

public function index() 
{ 
    $store = Store::(query)(to)(rows)->first(); 

    return view('store.index', compact('store')); 
} 

Теперь в том же контроллере у меня есть другая функция

public function abc() 
{ 
    return view('store.abc'); 
} 

Теперь к этой функции я также хочу отправить compact('store') на вид abc Я могу просто добавить запрос еще раз в abc(), но это будет лениво и вызовет проблемы с производительностью. Есть ли способ, которым я могу получить доступ к объекту $store в других функциях?

ответ

1

Если вы правильно поняли, что хотите получить один и тот же запрос из двух мест. Таким образом, экстракт получают магазины к другому методу, как

private function store() 
{ 
    $minutes = 10; // set here 
    return Cache::remember('users', $minutes, function() { 
     return Store::(query)(to)(rows)->first(); 
    });   
} 

Кроме того у меня есть cached запрос. Так что он выполняется один раз в определенное время.

Затем к нему доступ из двух других методов, таких как,

public function index() 
{ 
    $store = $this->store(); 
    return view('store.index', compact('store')); 
} 

public function abc() 
{ 
    $store = $this->store(); 
    return view('store.abc', compact('store')); 
} 
+0

Каждый раз, когда я вызываю 'store()', он будет запускать запрос каждый раз. Это будет неэффективно. – Alex

+0

Позвольте мне обновить ответ для вас. Вы можете кэшировать запрос. Он был доступен в Laravel 4.2. Мне нужно проверить, все ли он доступен в laravel 5.1. – Gayan

+0

Хорошо, я жду, и я использую Laravel5.3 – Alex

0

Попробуйте следующее. Не тестирование, но оно должно работать на вас.

class AController 
{ 
    public function getStore() 
    { 
     $store = Store::(query)(to)(rows)->first(); 

     return compact('store'); 
    } 

    public function index() 
    { 
     return view('store.index', $this->getStore()); 
    } 

    public function abc() 
    { 
     return view('store.abc', $this->getStore()); 
    } 

}