我有两张桌子:
A :id | user_id | phonenumber |状态| ...
B :id | user_id | phonenumber |名字| ...
我想列出表格 A 中的所有元素,但我必须将元素连接到表格 B 。
我可以用DB做到这一点:
DB::table('A')
->leftJoin('B', function ($join) {
$join->on('A.phonenumber', '=', 'B.phonenumber')
->on('A.user_id', '=', 'B.user_id');
})
->select(...)
->where('A.user_id', '=', $userId)
->get();
有可能以某种方式雄辩地解决它吗?
答案 0 :(得分:1)
你可以使用雄辩,一种方法是将其改为
A::leftJoin('B', function ($join) {
$join->on('A.phonenumber', '=', 'B.phonenumber')
->on('A.user_id', '=', 'B.user_id');
})
->select(...)
->where('A.user_id', '=', $userId)
->get();
使用纯粹的雄辩
您必须对A模型进行调整。我们将定义两个模型函数。
public function phoneNumber()
{
return $this->hasMany(B::class, "phonenumber", "phonenumber");
}
public function userId()
{
return $this->hasMany(B::class, "user_id", "user_id");
}
现在我们将查询更改为
A::with("phonenumber")->has("phonenumber")
->with("userId")->has("userId")
->where("user_id","=",$userId)
->get();
这应该适合你。
** 已更新 ***
如果您想要A中的所有记录,那么只需执行
A::with("phonenumber","userId")
->where("user_id","=",$userId)
->get();
答案 1 :(得分:0)
modelname::where(condition)->leftjoin(tablename,fieldname,othertable.fieldname)->get()
这是我们在laravel中编写联接的格式
$postdata = post::select('categories.id', 'posts.id', 'categories.categoryname', 'posts.title', 'posts.body', 'posts.image', 'posts.created_at', 'users.name')
->where('post_type', 'publish')
->where('status', 'active')
->where('categories.id', $id)
->leftJoin('users', 'users.id', '=', 'posts.user_id')
->leftJoin('categories', 'categories.id', '=', 'posts.category')
->orderBy('created_at', 'desc')
->paginate(5);
此查询显示博客,其中包含用户名和类别,使用加入它是我的proect方便查询,您也可以通过这种方式为您创建