Laravel 5.3 $appends 不起作用。

3
以下是模型的代码。
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    protected $appends = [
        "desc"
    ];

    protected $fillable = ['id'];

    public function getDescAttribute()
    {
        return strip_tags( $this->attributes['description'] );
    }
}

现在当我执行以下代码时:

$product = Product::first();

尽管当我执行 $product->desc 时会返回结果,但是 $product 中没有返回 desc 字段。我希望将这个结果附加到模型本身中。

以下代码会报错:

$product = Product::first()->get(['desc']);

它运行

Select desc from products...

但是因为描述不存在,我得到了错误。

我做错了什么吗?


当您添加protected $visible = ['desc'];时会发生什么? - user1897253
然后 $product = Product::first(); 在 tinker 中显示 App\Product {#729},但没有任何列。 - Sahil Deliwala
1个回答

1
将您添加到$appends数组中的字段仅在对象序列化为数组/JSON时附加。否则,在真正需要该属性之前定义此属性是没有意义的-这就是为什么访问$product->desc时会获取值。这样做是为了节省不必要的操作-计算自定义属性的值可能涉及一些繁重的操作,并且延迟到真正需要它的时候。

我认为在Laravel 5.3中$appends不起作用,或者如果我将JSON响应返回到单独的前端会发生什么? - Olufemi Ayodele

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接