laravel高级的Join语法详解以及使用Join多个条件


Posted in PHP onOctober 16, 2019

在laravel中我们常常会使用join,leftjion和rightjoin进行连表查询,非常的方便,但是我今天遇到一个问题,就是链表查询需要on多个条件,即我要订单的id和发货人都一样,默认的join只支持单个查询,所以我下面总结两种方法:

一、使用原是表达式(不推荐)

原生SQL中我们可以通过如下方法进行

select * from `orders` left join `users` on `orders`.`usename`=`users`.`usename` and `orders`.`platform`=`users`.`platform` where `orders`.`order_status` = 2

那么结合laravel,我们可以所以

DB::select('select * from `orders` left join `users` on `orders`.`usename`=`users`.`usename` and `orders`.`platform`=`users`.`platform` where `orders`.`order_status` = :id', ['id' => 1]);

二、使用高级的Join语法(推荐使用)

我们只需要所以如下代码即可完成我们的Join多个条件

DB::table('users')
  ->join('contacts', function ($join) {
    $join->on('users.id', '=','contacts.user_id')->on('users.usename', '=','contacts.usename');
    })
  ->get();

如果你想要了解更多,我们可以看一下文档中的描述:

让我们以传入一个闭包当作 join 方法的第二参数来作为开始。此闭包会接收 JoinClause 对象,让你可以在 join 子句上指定约束:

DB::table('users')
  ->join('contacts', function ($join) {
    $join->on('users.id', '=','contacts.user_id')->orOn(...);
    })
  ->get();

若你想要在连接中使用「where」风格的子句,则可以在连接中使用 where 和 orWhere 方法。这些方法会比较字段和一个值,来代替两个字段的比较:

DB::table('users')
    ->join('contacts', function ($join) {
      $join->on('users.id', '=', 'contacts.user_id')
         ->where('contacts.user_id', '>', 5);
    })
    ->get();

以上这篇laravel高级的Join语法详解以及使用Join多个条件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
非常好的php目录导航文件代码
Oct 09 PHP
判断Keep-Alive模式的HTTP请求的结束的实现代码
Aug 06 PHP
apache和php之间协同工作的配置经验分享
Apr 08 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
Jun 25 PHP
PHP内核探索之解释器的执行过程
Dec 22 PHP
PHP使用递归算法无限遍历数组示例
Jan 13 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
Apr 01 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
PHP PDOStatement::setFetchMode讲解
Feb 03 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
Laravel 连接(Join)示例
Oct 16 #PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 #PHP
PHP 代码简洁之道(小结)
Oct 16 #PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 #PHP
Laravel6.2中用于用户登录的新密码确认流程详解
Oct 16 #PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 #PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
Oct 16 #PHP
You might like
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
微信小程序 页面滑动事件的实例详解
2017/10/12 Javascript
解决nodejs的npm命令无反应的问题
2018/05/17 NodeJs
Vue自定义多选组件使用详解
2020/09/08 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
Python读写zip压缩文件的方法
2018/08/29 Python
Python networkx包的实现
2020/02/14 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
证券期货行业个人的自我评价
2013/12/26 职场文书
高中毕业自我评价
2014/02/08 职场文书
微笑服务演讲稿
2014/05/13 职场文书
法定代表人身份证明书
2014/09/10 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS
Ajax实现三级联动效果
2021/10/05 Javascript
一条 SQL 语句执行过程
2022/03/17 MySQL