gpt4 book ai didi

php - 同时使用 Laravel 强制转换和修改器

转载 作者:行者123 更新时间:2023-12-04 15:11:27 25 4
gpt4 key购买 nike

这是我的角色模型的一部分:

namespace App;

use App\Traits\Permissions;
use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
use Permissions;

/**
* {@inheritDoc}
*/
protected $casts = [
'permissions' => 'array',
];
}

这是我的权限特性:
namespace App\Traits;

trait Permissions
{
public function setPermissionsAttribute($permissions)
{
ksort($permissions);

$this->attributes['permissions'] = $permissions;
}
/**
* Adds a permission.
*
* @param string $permission
* @param bool $value
* @return void
*/
public function addPermission($permission, $value = true)
{
if (!array_key_exists($permission, $this->getAttribute('permissions'))) {
$this->setAttribute('permissions', array_merge($this->getAttribute('permissions'), [$permission => $value]));
}
}
}

这将引发以下异常:
QueryException in Connection.php line 769:
Array to string conversion (SQL: update `roles` set `permissions` = 1 where `id` = 46526e77-98b8-4126-aaae-7e109c7ea227)

如果我打印 $permissions ksort 之后的变量操作它正确具有权限数组:
array:1 [
"do.this" => true
]

如果我删除 setPermissionsAttribute函数它正确地将数组序列化为 json 并将其存储在数据库中。

我做错了什么还是不可能同时使用这两个功能?

最佳答案

当从模型中获取属性时,mutateAttribute 函数在 castAttribute 之前被调用。您可以查看 here 后面的代码

但是你可以在mutator中调用castAttribute函数

 public function getPermissionsAttribute($value) {
$p = $this->castAttribute('permissions', $value);
ksort($p);
return $p;
}

关于php - 同时使用 Laravel 强制转换和修改器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567925/

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