Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Laravel中连接3个以上的表_Laravel_Eloquent - Fatal编程技术网

如何在Laravel中连接3个以上的表

如何在Laravel中连接3个以上的表,laravel,eloquent,Laravel,Eloquent,我可以在Laravel加入3个表Laravel雄辩地如下: B D E +-----------+ +-----------+ +-----------+ | *id | | *id | | *id | | | | B_id | | | | | /| E_id

我可以在Laravel加入3个表Laravel雄辩地如下:

     B                 D                 E
+-----------+     +-----------+     +-----------+
| *id       |     | *id       |     | *id       |
|           |     |  B_id     |     |           |
|           |    /|  E_id     |\    |           |
|           |-----|           |-----|           |
|           |    \|           |/    |           |
|           |     |           |     |           |
+-----------+     +-----------+     +-----------+

$queries = DB::table('D')
    ->join('B', 'B.id', '=', 'D.B_id')
    ->join('E', 'E.id', '=', 'D.E_id')
    ->select('*')
    ->get();
因此,我如何连接3个以上的表,如下所示:

     A                  B                 D                 E
+-----------+      +-----------+     +-----------+     +-----------+
| *id       |      | *id       |     | *id       |     | *id       |
| B_id      |      |           |     |  B_id     |     |           |
|           |\     |           |    /|  E_id     |\    |           |
|           +------|           |-----|           |-----|           |
|           |/     |           |    \|           |/    |           |
|           |      |           |     |           |     |           |
+-----------+      +-----------+     +-----------+     +-----------+
我尝试在SQL中执行以下操作:

SELECT * FROM A,B,C,D
WHERE B.id=A.B_id
AND B.id=D.B_id
AND D.E_id=E.id

使用交叉联接,然后在查询的
where
部分使用联接条件是一种不好的做法

您需要将第二个查询转换为使用
内部联接
(或者简单地使用相同的
联接

那么,向雄辩的转变将更加直接。在你的情况下,你可以写:

SELECT * 
FROM B 
    JOIN A ON B.id=A.B_id
    JOIN D ON B.id=D.B_id
    JOIN E ON E.id=D.E_id
那么,您的雄辩提问将是直截了当的:

$querys=DB::table('B')
->join('A','B.id','=','A.B_id')
->联接('D','B.id','=','D.B_id'))
->连接('E','E.id','=','D.E_id'))
->选择(“*”)
->get();

您可以创建
数据库\u视图
,阅读相关内容并使用
sqlyog
应用程序