php - 声明变量时无法访问类中的受保护变量
问题描述
我是 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();```
解决方案
Eloquent 不知道该受保护的财产。所有 Eloquent 模型属性都通过 attributes 属性进行维护。如果您希望以这种方式完成设置值,请在您的setDescription
方法中使用 attributes 属性:
public function setDescription($description)
{
$this->attributes['description'] = $description;
}
有关更多信息,请参阅mutators。
推荐阅读
- r - 将数据结构绘制为R中的树
- microsoft-graph-toolkit - 如何使用 Microsoft 图形工具包通过电子邮件地址获取用户的存在?
- javascript - 我怎样才能获得当前是否?我在这里做了一些代码,但卡在 fetch()
- unity3d - Unity New Tag 或 Layer 并应用于对象,之后无需在检查器中重新选择
- html - 如何使用透视进行这样的悬停?
- python - 我的 python 代码跳过了 txt 文件的第一行?
- php - PHP PDO 一个查询或多个单独查询中的多个结果集
- haskell - 语言设计:关于为什么分配的变量在算术表达式中返回错误答案的困惑
- php - HTML - 防止网络摄像头图像被缓存
- c# - 如何以结构化方式读取 .txt 文件?