gpt4 book ai didi

php - 拉维尔 5.4 : Eloquent sync() not using model's mutator or attribute casting?

转载 作者:行者123 更新时间:2023-11-30 23:54:05 24 4
gpt4 key购买 nike

Mutators and Attribute Casting

我有一个带有“修改”属性的模型。该模型使用集合属性。这是因为存储是 bool 值,但属性是通过选择管理的(因为可用的 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 | |
+-------------+------------------+------+-----+---------+-------+

该模型使用以下增变器方法将“修改”转换为真。

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'];

我应该对集合运行某种闭包吗?我更愿意使用以模型为中心的流程。

最佳答案

从 laravel 文档中,方法 setXXXAttribute 是这样的

public function setFirstNameAttribute($value)
{
$this->attributes['first_name'] = strtolower($value);
}

所以我想你的代码应该修改:

public function setModifyAttribute($value){
($value==="Modify"):$this->attributes['modify']=1?$this->attributes['modify']=0;

}

也许是错的,祝你好运

关于php - 拉维尔 5.4 : Eloquent sync() not using model's mutator or attribute casting?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43653433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com