laravel5.1关于lists函数的bug

现象: 

在查询sql时,使用lists函数获得指定列的集合,却出现异常报错,如下

pimg_55c44de9375c5.png

查询语句为:

class DateAttrModel extends BaseModel{
      ……
      static function getDays(……){
		$days = self::lists('date’);      
		…………
               return $days;
      }
}
if(in_array($date, DateAttrModel::getDays(……))){      //这里报错,看意思是in_array的第二个参数应该是一个数组却传递了一个对象
      ……
}

原因: 

在laravel中有两种Builder类都有成员函数lists:查询构造器(基类为Illuminate\Database\Query\Builder)和Eloquent(Illuminate\Database\Eloquent\Builder)。 在laravel 4.2和5.1中查询构造器的lists函数均返回array;但是在laravel 5.1中Eloquent的lists返回的是collection对象类型,而laravel 4.2中Eloquent的lists返回的是array类型。 而这里的BaseModel是继承自Illuminate\Database\Eloquent\Model类,故上面调用lists返回的是collection对象而非数组类型,故在使用中当做数组来操作是错误的。

解决方式: 

正确的用法是将colletion对象转为array类型,collection对象转为数组可使用函数toArray():

    $days = self::lists('date’)->toArray();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值