首页 > 解决方案 > 声明变量时无法访问类中的受保护变量

问题描述

我是 laravel/php 的新手,希望有人能够为我回答问题。然后,当我在这里使用asset->setDescription 时,一切正常,但是一旦我取消注释“受保护的$description”,setDescription 方法就会停止工作。有谁知道为什么会这样?

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Asset extends Model
{
    protected $fillable = [
        'type', 'title','origin',
    ];
    // protected $description;
    public function __construct($type, $title, $origin)
    {
        $this->setType($type);
        $this->setTitle($title);
        $this->setOrigin($origin);
    }
    // Setters
    public function setType($type){
        $this->type = $type;
    }
    public function setTitle($title)
    {
        $this->title = $title;
    }
    public function setOrigin($origin)
    {
        $this->origin = $origin;
    }
    public function setDescription($description)
    {
        $this->description = $description;
    }
}

$type = $request->input('type');
$title = $request->input('title');
$origin = $request->input('origin');

// Create new asset
$asset = new Asset($type, $title, $origin);
$asset->setDescription('test');

$asset->save();```

标签: phplaravelclasseloquentlumen

解决方案


Eloquent 不知道该受保护的财产。所有 Eloquent 模型属性都通过 attributes 属性进行维护。如果您希望以这种方式完成设置值,请在您的setDescription方法中使用 attributes 属性:

public function setDescription($description)
{
    $this->attributes['description'] = $description;
}

有关更多信息,请参阅mutators


推荐阅读