Laravel 5.3 $ добавляет не работает

#php #laravel #laravel-5 #eloquent #laravel-5.3

#php #laravel #laravel-5 #красноречивый #laravel-5.3

Вопрос:

Ниже приведен код для модели

 <?php

namespace App;

use IlluminateDatabaseEloquentModel;

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

    protected $fillable = ['id'];

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

Итак, теперь, когда я делаю

 $product = Product::first();
  

Он не возвращает поле desc в $product, хотя, когда я делаю $product-> desc, он возвращает результат, но я хочу, чтобы этот результат был добавлен в саму модель.

Следующий код выдает ошибку

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

Он запускается

 Select desc from products...
  

Но поскольку desc отсутствует, я получаю сообщение об ошибке.

Я что-то делаю не так?

Комментарии:

1. Что происходит при добавлении protected $visible = ['desc']; ?

2. затем $product = Product::first(); отображается AppProduct {#729} с не столбцами в tinker

Ответ №1:

Поля, которые вы добавляете в массив $appends, добавляются только тогда, когда объект сериализуется в array / JSON. В противном случае не имеет смысла определять этот атрибут, пока он действительно не понадобится — вот почему вы получаете значение при доступе к $product-> desc . Это сделано для экономии ненужных операций — вычисление значения пользовательского атрибута может потребовать некоторых тяжелых операций и откладывается до тех пор, пока это действительно не понадобится.

Комментарии:

1. Я думаю, что $appends работает с Laravel 5.3 или что произойдет, если я возвращаю ответ JSON на отдельный интерфейс?