【问题标题】:How to include an Eloquent relationship into JSON conversion result?如何在 JSON 转换结果中包含 Eloquent 关系?
【发布时间】:2016-11-25 20:02:22
【问题描述】:

我想使用 Laravel 5 将 JSON 数据返回到我的 Angular 前端,但我遇到了这个问题:我有一个与 AlertFrequency 有关系的 Alert 雄辩模型强>模型:

class Alert extends Model
{
    public function alertFrequency()
    {
        return $this->belongsTo('App\Models\AlertFrequency');
    }
}

但是当我尝试将警报列表作为 JSON 返回时...

$alerts = Auth::user()->alerts->toJson();

return $alerts;

这是我得到的:

[{"id":9,"title":"fqdsgsq","place":"gdqsgq","user_id":1,"alert_frequency_id":3,"job_naming_id":3,"created_at":"2016-07-16 14:09:41","updated_at":"2016-07-16 14:09:41"}]  

所以我确实有“alert_frequency_id”列值,但没有实际的 AlertFrequency 对象

到目前为止,我发现唯一可行的解​​决方法是:

$alerts = Auth::user()->alerts;

foreach ($alerts as $alert) {
    $alert->jobNaming = $alert->jobNaming;
    $alert->alertFrequency = $alert->alertFrequency;
}

return $alerts;

太丑了……

【问题讨论】:

    标签: php json laravel eloquent


    【解决方案1】:

    您需要手动加载关系。这称为lazy eager loading 关系。

    $alerts = Auth::user()->alerts->load('alertFrequency')->toJson();
    return $alerts;
    

    当您执行 Auth::user()->alerts->toJson() 时,您只是从 Alert 模型中获取数据,但您想要来自另一个模型(另一个表)的数据,那么您需要使用 load 方法告诉它。

    奖金

    如果你的代码在控制器方法或路由器闭包中而不是调用toJson(),你可以只返回集合,Laravel 会为你做这件事。示例:

    public function controllerMethod() {
        return Auth::user()->alerts->load('alertFrequency');
    }
    

    编码愉快!

    【讨论】:

    • 老兄,你刚刚救了我的命。我读过“嵌套急切加载”,这太棒了。我不知道这个 L5 功能。使用 Laravel 越来越好,我爱上了这个框架。
    猜你喜欢
    • 2013-04-07
    • 1970-01-01
    • 2016-03-25
    • 2015-02-27
    • 1970-01-01
    • 2018-10-04
    • 2018-03-22
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多