解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题

问题描述:在使用laravel的左联接查询的时候遇到一个问题,查询中带了右表一个筛选条件,导致结果没有返回右表为空的记录。

先附上代码:

DB::table('users as u')
  ->select('u.user_id','c.class')
  ->leftJoin('class as c','c.user_id','=','u.user_id')
  ->where('c.status','=',2)
  ->get();

解决方案:

1.在mysql的角度上说,直接加where条件是不行的,会导致返回结果不返回class为空记录,正确是写法应该是

select u.user_id,c.class from users u left join class c on u.user_id=c.user_id and c.status=2;

没错,正确写法是left join .. on .. and 而非 left join .. on .. where

2.那么,在laravel里这个mysql表达式的写法是怎样的,我查阅了多个手册。。。及国外网友求助问答,得到了以下答案

DB::table('users as u')
  ->select('u.user_id','c.class')
  ->leftJoin('class as c', function($join)
  {
    $join->on('c.user_id', '=', 'u.user_id')
    ->on('c.status', '=', '2');
  })
  ->get();

希望能帮到大家!

以上这篇解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Laravel Eloquent ORM 多条件查询的例子

    一.需求: 在数据搜索时最常见的就是调用同一个方法查询,而查询的字段却可能是其中一个或其中的几个字段一起组合查询,例如:对列表的搜索,基本上都是几个字段随意组合搜索.那么在model里就需要判断有那个字段组合,怎么组合. 网上找了很久,Laravel群里也问了几个,都说没有写过,于是自己写个吧.话不多说,见代码: function findByParam($param = array()) { $select = new Customer(); if (isset($param['name'])

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

    在laravel中我们常常会使用join,leftjion和rightjoin进行连表查询,非常的方便,但是我今天遇到一个问题,就是链表查询需要on多个条件,即我要订单的id和发货人都一样,默认的join只支持单个查询,所以我下面总结两种方法: 一.使用原是表达式(不推荐) 原生SQL中我们可以通过如下方法进行 select * from `orders` left join `users` on `orders`.`usename`=`users`.`usename` and `orders`

  • 解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题

    问题描述:在使用laravel的左联接查询的时候遇到一个问题,查询中带了右表一个筛选条件,导致结果没有返回右表为空的记录. 先附上代码: DB::table('users as u') ->select('u.user_id','c.class') ->leftJoin('class as c','c.user_id','=','u.user_id') ->where('c.status','=',2) ->get(); 解决方案: 1.在mysql的角度上说,直接加where条件

  • Laravel实现ORM带条件搜索分页

    Laravel条件搜索一般使用where方法,如下: 查询构造器: $users = DB::table('users')->where('votes', '=', 100)->get(); 或者ORM: $users = User::where('votes', '=', 100)->all(); 当有多个条件时,可以多次调用where方法: $articles = Article::where('id','>','10')->where('is_auth','=','1'

  • Bootstrap table中toolbar新增条件查询及refresh参数使用方法

    我们想要在bootstrap-table中自定义查询条件如何实现呢?这些自定义的按钮.输入框是定义在哪个位置呢?还记得上一节中我们在配置中有这样一个属性: //工具按钮用哪个容器 toolbar: '#toolbar', <div id="toolbar"></div> 我们定义的查询条件就是放入到这个div中的,先看一下我们期望的效果: 要实现这样的效果,我们首先要新增查询表单: <div class="container">

  • 解决在Laravel 中处理OPTIONS请求的问题

    前面已经说过可以通过中间件来处理OPTIONS请求,近日寻得一个简单的办法. 在路由文件中定义一个路由,通过正则来匹配相应的路由. Route::options('/{all}', function(Request $request) { $origin = $request->header('ORIGIN', '*'); header("Access-Control-Allow-Origin: $origin"); header("Access-Control-All

  • Laravel关系模型指定条件查询方法

    对于关系模型来说,有时候我们需要甄别关联后结果,例如,班级和学生是一对多关联,我现在查询班级,但是想只显示正常状态,即状态为1的学生,因为有的学生从这个班级里面删除了,状态是4,那么我们在查询的时候就可以使用如下语法: 1.定义关联关系: Class模型: public function learners() { return $this->belongsToMany('App\Models\Customer', 'learner_relation', 'class_id', 'learner_

  • 解决在laravel中auth建立时候遇到的问题

    当你使用auth做用户登录注册的时候,会很方便,但是你在做数据库迁移的时候可能会遇到一个问题 $ php artisan migrate Migration table created successfully. [Illuminate\Database\QueryException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was t oo long; max key length is 767

  • Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()

    Laravel 5.5 Linux mint 18 PHPStorm 最近刚玩Laravel,手册源码还没来得及看完就跃跃欲试做了个小项目,其中有个需求是分组查询数据库中的一个字段并返回每个分组中的数量,还是去翻手册(手册确实够简单): groupBy 和 having 方法可用来对查询结果进行分组.having 方法的用法和 where 方法类似: $users = DB::table('users') ->groupBy('account_id') ->having('account_id

  • C#如何将Access中以时间段条件查询的数据添加到ListView中

    一.让ListView控件显示表头的方法 在窗体中添加ListView 空间,其属性中设置:View属性设置为:Detail,Columns集合中添加表头中的文字. 二.利用代码给ListView添加Item. 首先,ListView的Item属性包括Items和SubItems.必须先实例化一个ListIteView对象.具体如下: ListViewItem listViewItem=new ListViewItem(); listViewItem.SubItems[0].Text="&quo

  • Mybatis中的Criteria条件查询方式

    Mybatis Criteria条件查询 Criterion Criterion是最基本,最底层的Where条件,用于字段级的筛选. Criteria Criteria包含一个Cretiron的集合,每一个Criteria对象内包含的Cretiron之间是由AND连接的,是逻辑与的关系. 其它 Example类的distinct字段用于指定DISTINCT查询. orderByClause字段用于指定ORDER BY条件,这个条件没有构造方法,直接通过传递字符串值指定. 代码示例 import

随机推荐