这是那些错误信息与手头证据直接相矛盾的头脑风暴者之一。我在名为Family
的Laravel模型中有以下方法,该模型具有id
字段:
public function getFamilyName()
{
$search_id = ( empty( $this->primary_id ) ) ? $this->id : $this->primary_id;
$names = DB::select(
'SELECT GROUP_CONCAT(`last_name` ORDER BY `last_name` SEPARATOR \'/\' ) `name_list`
FROM (SELECT `last_name`
FROM `children`
WHERE `primary_id` IS NULL
AND `family_id`=?
UNION
SELECT `last_name`
FROM `parents`
WHERE `primary_id` IS NULL
AND `family_id`=?) `last_names`',
array($search_id, $search_id) );
$nameList = $names[0]->name_list;
return ($nameList=="") ? 'Unnamed': $nameList;
}
此代码在今天早些时候工作正常,但现在正在抛出试图获取非对象异常的属性
$nameList = $names[0]->name_list
。
我没有碰过这个方法,所以我不知道出了什么问题。我通过使用print_r抛出Exceptions进行了一些快速而肮脏的调查,并确定了以下内容:
print_r($names)
已解决
Array ( [0] => stdClass Object ( [name_list] => Esper-Smith/Smith ) )
print_r($names[0])
解析为stdClass Object ( [name_list] => Esper-Smith/Smith )
print_r($names[0]->name_list)
解析为'Esper-Smith/Smith'
print_r(is_object($names[0]))
返回1 那么为什么我会得到$names[0]
是非对象的异常?为什么可以通过print_r()
调用成功解析的表达式抛出异常?当我的代码开始变得可爱时,我不喜欢它......
答案 0 :(得分:1)
当DB :: Select回绕PDO
并使用fetchMode
属性在对象或数组之间进行选择时,您需要确保在执行之前正确设置fetchMode
Connection
查询。
Laravel setFetchMode
实现方法var data = [];
,它设置默认连接模式。对于脚本执行的所有剩余部分,此更改将持续存在,因此如果您将其更改为某个位置,则需要记住将其更改回其余代码所期望的内容。