创建相关邮件时,我注意到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
]
以下是Season
和Message
模型:
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);
}
}
这不是一个受保护的属性,所以我在这些模型上还有其他东西可以忽略吗?
答案 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字段类型。
答案 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()
方法。