首页 Order Laravel 正文

Laravel 构造器的 join 查询

金鹏头像 金鹏 Laravel 2022-04-01 11:04:04 0 431
导读:一.join 查询1.使用join 实现内联接的多表查询,比如三张表进行inner join 查询; $users ...
一.join 查询

1. 使用 join 实现内联接的多表查询,比如三张表进行 inner join  

$users = DB::table( 'users ')

->join( 'books ', 'users.id ', '= ', 'books.user_id ')

                                                    ->join( 'profiles ', 'users.id ', '= ', 'profiles.user_id ')

                                                    ->select('users.id ', 'users.username ', 'users.email ','books.title ', 'profiles.hobby ')

                                                    ->get();

 

2. 以使用 leftjoin 左连接或 rightjoin 右连接实现多表查询;

$users = DB::table( 'users ')

->leftJoin( 'books ', 'users.id ', '= ', 'books.user_id ')      

->rightjoin( 'profiles ', 'users.id ', '= ', 'profiles.user_id ') ->get();

3. 使 crossjoin 交叉连接查询,会生成笛卡尔积,再用 distinct()取消重复;

$users = DB::table( 'users ')

->crossJoin( 'books ')

->select( 'username ', 'email ')

->distinct()

->get();

 

4. 如果你想要实现闭包查询,和 where 类似,只不过要用 on orOn 方法;

$users = DB::table( 'users ')

->join( 'books ', function ($join) {

//支持 orOn 连缀

$join->on('users.id ', '= ', 'books.user_id ');

})->toSql();

 

PSon()方法后面如果想要再增加筛选条件,可以追加 where()

 

5. 使用 joinSub 实现子连接查询,将对应的内容合并在一起输出;

//子连接查询

$query = DB::table( 'books ')->selectRaw( 'user_id,title ');

$users = DB::table( 'users ')->joinSub($query, 'books ', function ($join) {

$join->on('users.id ', '= ', 'books.user_id ');

})->get();

 

6. 使用 union() unionAll()方法实现两个查询的合并操作;

                        //union 取消重复 unionAll 不取消重复

                        $query = DB::table( 'users ');

$users = DB::table( 'users ')

->union($query)

->get();


本文地址:https://www.jinpeng.work/?id=160
若非特殊说明,文章均属本站原创,转载请注明原链接。
广告3

欢迎 发表评论:

  • 请填写验证码

日历

«    2025年4月    »
123456
78910111213
14151617181920
21222324252627
282930

控制面板

您好,欢迎到访网站!
  查看权限
广告2

退出请按Esc键