首页 > 解决方案 > 将此 mysql 查询转换为 Laravel Eloquent

问题描述

我是 Laravel 的绝对新手,我正在尝试将我的网站移植到这个新框架中。我有这个让我头疼的查询,我很想将它转换为 Eloquent 格式,以便我可以在我的控制器上使用它。

// It makes sure that you don't get as result yourself nor the people you already follow. 
//I dont even know how much time I spent on this...
 $query = mysqli_query($conn , "  SELECT username, avatar_url FROM users 
                                  WHERE username LIKE '%".$username."%' AND username <>'".$user."'
                                  except SELECT u.username, u.avatar_url FROM users as U JOIN followers AS F 
                                  ON U.id = F.followed_user_id
                                  where following_user_id = ( select id from users where username='".$user."' );");

编辑:我已经制作了这样的第一部分:DB::table("users")->where("username", "LIKE", "%$search_people%")->where("username", '<>', $user->username)->get();它可以工作,但我无法处理除此之外的部分。我有一个名为 $user 的变量,用于存储用户 ID,以便简化最后一个 WHERE。我写了这样的东西,但它完全关闭了:

DB::table("users")->where("username", "LIKE", "%$search_people%")
                ->where("username", '<>', $user->username) /*next part is wrong*/
                ->except("$user->username", "$user->avatar_url")
                ->join("followers", "followers->followed_user_id", "=", "$user->id")
                ->where("following_user_id", "=", "$user->id");

EDIT2:我试图把它分成两个查询。有什么办法可以将两者相交吗?

我需要 A 减 B。

$result_a = DB::table("users")->where("username", "LIKE", "%$search_people%")
                ->where("username", '<>', $user->username);

$result_b = DB::table("users")->select("username", "avatar_url")
                    ->join("followers", "followers.followed_user_id", "=", "users.id" )
                    ->where("following_user_id", "=", "$user->id")->get();

标签: mysqldatabaselaraveleloquent

解决方案


推荐阅读