Eloquent Eager Load Constraints 返回 JSON String 而不是 Object

Posted

技术标签:

【中文标题】Eloquent Eager Load Constraints 返回 JSON String 而不是 Object【英文标题】:Eloquent Eager Load Constraints returning JSON String instead Object 【发布时间】:2014-03-05 21:40:03 【问题描述】:

我正在尝试使用 Laravel 4.1 并使用一对多关系进行 Eloquent Eager Load。一切似乎都可以正常工作:

$groups = Group::with(array('points' => function($query) 
                $query->orderBy('pts', 'DESC');
         ))->get();

但是当我尝试读取属性时...

    foreach( $groups as $group ) 
        echo var_dump($group->points);
    

它返回对象的 JSON 字符串(其中包含正确的数据)

我应该怎么做才能获取 PHP 对象而不是 JSON?

编辑: 这是我的模型

class Group extends Eloquent

    public $timestamps = true;

    public function points() 
        return $this->hasMany('Point');
    


.

class Point extends Eloquent


    public function group() 
        return $this->belongsTo('Group');
    


【问题讨论】:

你试过json_decode()函数吗? 我做到了,但是那样它就失去了 Laravel 的所有功能,它只是一个定义了属性的对象。不是 Eloquent ORM 实例。我想我一定是做错了什么,或者应该有办法获取 Eloquent 对象而不是 JSON 字符串。 试试var_export($group->points) 问题不在于 var_dump,但您的建议帮助我了解如何正确显示它。谢谢。 Laravel 提供了一个 dd() (dump&die) 辅助函数来调试,如果打印或返回任何 Eloquent 对象,Laravel 将其转换为 json 字符串。 【参考方案1】:

看起来代码是正确的,Laravel 会检测到你如何显示变量并显示与用例更相关的格式。

var_export() 将显示真实的对象解剖结构。如果需要调试。

【讨论】:

以上是关于Eloquent Eager Load Constraints 返回 JSON String 而不是 Object的主要内容,如果未能解决你的问题,请参考以下文章

Eager-load 相同的关系,不同的约束

Laravel:Eloquent Eager Loading 关系的选择

通过 Eager Loading 从 Eloquent 获取 RAW SQL 查询

如何使用 Laravel 的 Eloquent 关系与 Eager Loading 连接 3 个表?

Laravel Eloquent Eager Loading:加入同一张表两次

关于Eager用Laravel Eloquent Model中的选择过滤器加载