问题描述
我使用 ValueObject 转换作为模型的 ID。当我从数据库中获取记录时一切正常,但是在保存时,ID 为空。如果我将“casts”注释掉,则 ID 是正确的。
示例:
$game = new Game($data);
$game->created_by = $userId; // Id ValueObject
$game->save();
dd($game);
// attributes:
// "id" => null,// "created_by" => Id{#value: 10},
Id 值对象:
class Id
{
public function get($model,$key,$value,$attributes)
{
$this->value = $value;
return $this;
}
public function set($model,$attributes)
{
$this->value = $value;
}
public function value(): int
{
return $this->value;
}
public function __toString()
{
return (string) $this->value;
}
}
型号:
class Game extends Model
{
protected $casts = [
'id' => Id::class
];
}
我可以用它做什么?
提前致谢
解决方法
好吧,我认为应该有一个 ValueObject 和一个 CastingObject,我最终得到了类似的东西:
class Game extends Model
{
protected $casts = [
'id' => IdCast::class
];
}
class IdCast implements CastsAttributes
{
public function get($model,$key,$value,$attributes)
{
return new Id(
$attributes['id']
);
}
public function set($model,$attributes)
{
return [
'id' => $value
];
}
}
class Id
{
private $value;
public function __construct($id)
{
$this->value = $id;
}
public function value(): int
{
return $this->value;
}
public function __toString()
{
return (string) $this->value;
}
}