如何解决Laravel:保存后作为ValueObject的ID为空
我使用 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;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。