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;
    }
}