2017-09-22 6 views
0

J'ai une collection créée avec une requête laravel compliquée et le résultat de cette requête est trop grand. Donc je pense que je dois utiliser algolia. Comme je le sais, algolia obtient les données de la table modèle à json et sert à partir de là.Recherche sur la collection de résultats de requête personnalisée avec Algolia - Laravel

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

Il faut certaines configurations de modèle comme searchAs etc .. tous sont liés avec le modèle existant et vous pouvez faire une recherche à partir du modèle avec la méthode search (exemple ci-dessus). Ce que je veux demander est, j'ai une requête compliquée et le résultat a trop d'attributs qui viennent d'autres tables (jointes). Je veux faire une recherche sur mon résultat de requête personnalisé. C'est possible ?

Mon exemple requête:

$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 
     })... 
+0

Indexez-vous le modèle Friend et souhaitez-vous créer un index distinct pour cette requête? –

Répondre

0

Je crois que la meilleure façon serait d'utiliser cette demande et de la chaîne la méthode searchable(). Il indexera la collection retournée par la requête à 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(); 
+0

merci pour la réponse. Je reviendrai vers vous quand j'essaierai et réussis. – fthopkins

+0

Ne pas hésiter à marquer ma réponse si cela a fonctionné pour vous;) –