雄辩的连接表有两个条件

时间:2017-03-31 08:41:15

标签: php laravel eloquent

我有两张桌子:

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();

有可能以某种方式雄辩地解决它吗?

2 个答案:

答案 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方便查询,您也可以通过这种方式为您创建