2017-01-15 12 views
1

В настоящее время я использую разведчик Laravel для поиска по всему сайту. Поэтому, когда кто-то поиск сообщение я возвращаю это:Laravel scout lazy loading

public function messages($search) 
{ 
    return Message::search($search)->paginate(4); 
} 

Но теперь я отправить соответствующий форум aswel. Вы уже писали:

public function messages($search) 
{ 
    return Message::search($search)->load('forum')->paginate(4); 
} 

Это не работает. Как я могу это сделать?

ответ

1

Я могу только дать вам это обходное решение на данный момент. Вы можете загрузить данные вручную форум:

$messages = Message::search($search)->paginate(4); 
$forums = Forum::whereIn('id', $messages->pluck('id'))->get(); 

return compact('messages', 'forums'); // Return an array of messages and related forums. 
+0

Это вызовет исключение: '' 'Вызов неопределенного метода Laravel \ Scout \ Builder :: with()' '' – Jamie

+0

Спасибо за помощь. Он снова вызывает ошибку: '' 'Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: search()' '' – Jamie

+0

@Jamie Я не могу дать вам лучшее решение прямо сейчас, но я добавил некоторое обходное решение , Код раздела 'Forum' связан с типом отношения между моделями' Message' и 'Forum'. –

0

Решение:

$message = Message::search($query)->paginate(25); 
// while this returns a Collection, it also updates the $message Paginator. 
$message->load('forum'); 

$message будет результат в настоящее время.

Вы получаете данные о paginator ... подробнее здесь. https://gist.github.com/Artistan/fea3e21f149fdf845e530299bcff37d4

+0

ваш метод возвращает коллекцию вместо разбитых на страницы результатов. –

+0

@ AndriusSolopovas - подробнее здесь .. https://gist.github.com/Artistan/fea3e21f149fdf845e530299bcff37d4 – Artistan