Laravel 查询生成器结果对象抛出 "Trying to get property of non-object" 异常

Laravel Query Builder result object is throwing "Trying to get property of non-object" exception

这是一个令人头疼的问题,其中错误信息与手头的证据直接矛盾。我在名为 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;
}   

此代码在今天早些时候之前运行良好,但现在抛出 Trying to get 属性 of non-object exception at
$nameList = $names[0]->name_list

我没有接触过这个方法,所以我不知道哪里出了问题。我使用 print_r 通过抛出的异常进行了一些快速而肮脏的调查,并确定了以下内容:

那么,为什么我会收到 $names[0] 不是对象的异常?为什么对于可以通过 print_r() 调用成功解决的表达式抛出异常?我不喜欢我的代码开始变得可爱...

由于 DB::Select 环绕 PDO 并使用 fetchMode 属性 在对象或数组之间进行选择,您需要确保您的 fetchMode 在执行查询之前已正确设置。

Laravel Connection 实现方法 setFetchMode 设置默认连接模式。此更改将在脚本执行的所有其余部分持续存在,因此如果您在某个地方更改它,您需要记住将其更改回您的代码的其余部分所期望的样子。