Поиск по коллекции результатов пользовательского запроса с помощью Algolia - Laravel

У меня есть коллекция, созданная с помощью сложного запроса laravel, и результат этого запроса слишком велик. Поэтому я думаю, что должен использовать algolia. Насколько я знаю, algolia получает данные таблицы модели как json и обслуживает их оттуда.

$result = User::search("UserName")->get();

Это необходимо для некоторых конфигураций модели, таких как searchAs и т. д., все они связаны с существующей моделью, и вы можете выполнить поиск по модели с помощью метода search (пример выше). Я хочу спросить, у меня сложный запрос, и результат имеет слишком много атрибутов, которые поступают из других таблиц (объединенных). Я хочу выполнить поиск по моему пользовательскому результату запроса. Является ли это возможным ?

Мой пример запроса:

    $friendShips = Friend::
    join("vp_users as users","users.id","=","friendships.friendID")
        ->leftJoin("vp_friendships as friendshipsForFriend",function($join) use ($request)
        {
            $join->on("friendships.friendID","=","friendshipsForFriend.userID");
            $join->on("friendshipsForFriend.friendID","=",DB::raw($request->userID));

        })
        ->leftJoin("vp_videos_friends as videosFromFriendMedias",function($join)
        {
            $join->on("videosFromFriendMedias.userID","=","friendships.friendID");
            $join->on("videosFromFriendMedias.friendID", "=" ,"friendships.userID");
            $join->on("videosFromFriendMedias.isCalled", "=" , DB::raw(self::CALLED));

        })
        ->leftJoin("vp_videos_friends as videosToFriendMedias",function($join)
        {
            $join->on("videosToFriendMedias.userID", '=', "friendships.userID");
            $join->on("videosToFriendMedias.friendID", '=', "friendships.friendID");
            $join->on(function($join){
                $join->on("videosToFriendMedias.isCalled", '=', DB::raw(self::CALLED));
                $join->orOn("videosToFriendMedias.isActive", '=', DB::raw(self::ACTIVE));
            });
        })
        ->leftJoin("vp_videos_friends as 
        //some join rules too
        })...

person fthopkins    schedule 22.09.2017    source источник
comment
Вы индексируете модель Friend и хотите создать отдельный индекс для этого запроса?   -  person Julien Bourdeau    schedule 25.09.2017


Ответы (1)


Я считаю, что лучшим способом было бы использовать этот запрос и связать метод searchable(). Он проиндексирует коллекцию, возвращенную запросом к Algolia.

$friendShips = Friend::
    join("vp_users as users","users.id","=","friendships.friendID")
    ->leftJoin("vp_friendships as friendshipsForFriend",function($join) use ($request) {
        $join->on("friendships.friendID","=","friendshipsForFriend.userID");
        $join->on("friendshipsForFriend.friendID","=",DB::raw($request->userID));

    })
    ->searchable();
person Julien Bourdeau    schedule 25.09.2017
comment
Спасибо за ответ. я вернусь к вам, когда я попытаюсь и удалось. - person fthopkins; 27.09.2017
comment
Не стесняйтесь отметить мой ответ, если это сработало для вас;) - person Julien Bourdeau; 28.09.2017