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

查询语句为:
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();
Laravel 中 lists 函数使用异常及解决方案
本文探讨了 Laravel 框架中查询构造器与 Eloquent 的 lists 函数在不同版本间的区别,解释了导致在使用 lists 获取指定列集合时出现异常的原因,并提供了正确的转换方法以避免错误。
1054

被折叠的 条评论
为什么被折叠?



