【发布时间】:2017-04-27 09:10:36
【问题描述】:
Mutators and Attribute Casting
我有一个带有“修改”属性的模型。 该模型使用一组属性。这是因为存储是布尔值,但属性是通过选择管理的(因为可用的 FE 选项是三态:[none | modify | access] 其中不存储 'none' BE。
存储如下(mysql):
+-------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+-------+
| prop_id | int(10) unsigned | NO | PRI | NULL | |
| modify | tinyint(1) | NO | | 1 | |
+-------------+------------------+------+-----+---------+-------+
该模型使用以下 mutator 方法将“修改”转换为 true。
public function setModifyAttribute($value)
{
$this->attributes['modify'] = ($value === "modify");
}
为 sync() 传递的典型集合如下:
$properties =
Collection {
#items: array [
1 => array [
"modify" => "modify"
]
7 => array [
"modify" => "access"
]
]
}
然后我将按如下方式调用属性的同步:
$this->properties()->sync($properties);
但是,setModifyAttribute() 没有从 sync() 访问。
或者,使用值 'true' 和 'false' sync() 似乎忽略了属性转换提示。
protected $casts = ['modify' => 'boolean'];
我应该对集合运行某种闭包吗?我更喜欢使用以模型为中心的流程。
【问题讨论】:
-
你找到答案了吗?
-
@danialdezfooli,老实说 - 不。最后我只是解决了这个问题。
标签: php mysql laravel eloquent laravel-eloquent