【问题标题】:Laravel 5.3 $appends not workingLaravel 5.3 $appends 不工作
【发布时间】:2016-10-11 06:35:03
【问题描述】:

下面是模型代码

<?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...

但是由于 desc 不存在,我得到了错误。

我做错了什么吗?

【问题讨论】:

  • 添加protected $visible = ['desc'];会发生什么?
  • 然后$product = Product::first(); 显示App\Product {#729} 而不是修补程序中的列

标签: php laravel laravel-5 eloquent laravel-5.3


【解决方案1】:

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

【讨论】:

  • 我认为 $appends 不适用于 Laravel 5.3,或者如果我将 JSON 响应返回到单独的前端会发生什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-01
  • 2017-05-23
  • 2017-04-24
  • 2017-03-29
  • 2017-01-01
  • 1970-01-01
  • 2017-01-13
相关资源
最近更新 更多