【问题标题】:Search On Custom Query Result-Collection With Algolia - Laravel使用 Algolia 搜索自定义查询结果集合 - Laravel
【发布时间】:2018-03-04 11:12:35
【问题描述】:

我有一个用复杂的 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
        })...

【问题讨论】:

  • 您是否正在为 Friend 模型编制索引并且要为此查询创建单独的索引?

标签: php mysql laravel search algolia


【解决方案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();

【讨论】:

  • 感谢您的回答。当我尝试并成功时,我会回复你。
  • 如果我的回答对你有用,请不要犹豫;)
猜你喜欢
  • 2018-07-30
  • 2019-02-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 2014-03-19
相关资源
最近更新 更多