2017-09-22 1 views
0

Ich habe Sammlung, die mit komplizierten Laravel-Abfrage erstellt und das Ergebnis dieser Abfrage ist zu groß. Also ich denke, ich muss Algolia verwenden. Wie ich weiß, holt sich algolia die Modelltabellendaten als json und bedient von dort aus.Suche auf benutzerdefinierte Abfrage Ergebnis-Sammlung mit Algolia - Laravel

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

Es muss einige Modellkonfigurationen wie searchAs etc .. alle sind mit bestehenden Modell und Sie können mit search Methode (Beispiel oben) Suche von Modell machen. Was ich fragen möchte, ist, ich habe komplizierte Abfrage und Ergebnis hat zu viele Attribute, die von anderen Tabellen kommen (verbunden). Ich möchte die Suche nach meinem benutzerdefinierten Abfrageergebnis durchführen. Ist es möglich ?

Mein Beispiel Abfrage:

$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

Indexieren Sie das Friend-Modell, und Sie möchten einen separaten Index für diese Abfrage erstellen? –

Antwort

0

Ich glaube, der beste Weg, diese Anforderung und Kette der searchable() Methode zu verwenden wäre. Es indiziert die von der Abfrage zurückgegebene Sammlung an 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

danke für die Antwort. Ich werde zu dir zurückkommen, wenn ich versuche und erfolgreich bin. – fthopkins

+0

Zögern Sie nicht, meine Antwort zu markieren, wenn das für Sie funktionierte;) –