Laravel 加入两个表,如果没有找到记录,则获取 NULL ROW

Joh*_*Pie -3 mysql laravel

让我们考虑两个表,“用户”和“数据”

“用户”表数据(总行数-> 2)->

user_id      name         email
1            Test      test@test.com
2            Try       try@try.com
Run Code Online (Sandbox Code Playgroud)

“data”表数据(总行数->1)->

data_id     user_id    json_field
1               1           {}
Run Code Online (Sandbox Code Playgroud)

使用 Laravel 连接

DB::tabe("users")->join("data" , "users.user_id" , "=" , "data.user_id")->get();
Run Code Online (Sandbox Code Playgroud)

about 查询只返回一行,即

user_id      name      email            data_id    json_fied
  1          Test    test@test.com         1          {}
Run Code Online (Sandbox Code Playgroud)

但是,我想得到如下两行的结果:

user_id      name      email            data_id    json_fied
  1          Test    test@test.com         1          {}
  2          Try     try@try.com          NULL       NULL
Run Code Online (Sandbox Code Playgroud)

任何的想法?

小智 7

而不是join使用leftJoin.

解释:

joinINNER JOIN,它选择具有两个表中的匹配值的记录。

leftJoinLEFT JOIN,它返回左表中的所有记录(在你的情况下users),并从右侧表(匹配的记录data表)。NULL如果没有匹配项,则结果来自右侧。

  • @JohnyPie 这是一个完全不同的问题,应该单独提问。 (2认同)