Использование Laravel одновременно и кастами, и мутаторами

Это часть моей ролевой модели:

namespace App;

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

class Role extends Model
{
use Permissions;

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

Это моя черта Permissions:

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 и сохраняет его в базе данных.

Я делаю что-то не так или просто невозможно использовать обе эти функции?

0

Решение

$cast это тоже своего рода мутатор. Нет смысла иметь оба способа. Вы должны определить другое поле, основанное на permissions приписывать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]