无法在模型上设置属性

时间:2017-11-24 14:26:41

标签: php laravel

创建相关邮件时,我注意到message列未设置,但仍设置为null

    $message = $lastSeason->messages()->make([
        'type' => \App\Message::SEASON,
        'message' => ['this should be converted to json on save'],
    ]);
    dd($message->toArray());

以上输出:

array:3 [
  "type" => "season"
  "message" => null
  "season_id" => 1
]

以下是SeasonMessage模型:

class Message extends Model
{
    const SEASON = 'season';

    protected $guarded = [
        'id',
    ];

    protected $casts = [
        'message' => 'array',
    ];

    public function season() : BelongsTo
    {
        return $this->belongsTo(Season::class);
    }
}


class Season extends Model
{
    protected $guarded = [
        'id',
    ];

    public function messages() : HasMany
    {
        return $this->hasMany(Message::class);
    }
}

这不是一个受保护的属性,所以我在这些模型上还有其他东西可以忽略吗?

2 个答案:

答案 0 :(得分:2)

尝试保存编码数据

$message = $lastSeason->messages()->make([
        'type' => \App\Message::SEASON,
        'message' => json_encode('this should be converted to json on save'),
]);

别忘了启用 消息模型上的$fillable = ['message','type']

您的数据库应该具有包含序列化JSON的JSON或TEXT字段类型。

关于documentation

答案 1 :(得分:0)

不知道从哪里获得make()或为什么没有抛出异常。在Laravel API docs中,没有定义这样的方法。我认为您正在寻找here所述的create()

$message = $lastSeason->messages()->create([
    'type' => \App\Message::SEASON,
    'message' => ['this should be converted to json on save'],
]);

或者,如果make()方法确实存在,您可以尝试在其上运行->save()方法。