Laravel / PHP / MySQL - 尽管通过 Eloquent 模型提供了一个值,但为什么一列存储了空值?
Laravel / PHP / MySQL - why is one column stored with a null value despite being provided a value via the Eloquent model?
这里是奇数。我有一个包含许多列的 table(不寻常,是吗?),并且正在通过 Laravel (v9) 中的 Eloquent 模型创建一行。这是代码片段
while ($i <= $numrecs - 1) {
// if the qty is non-zero then we want to store it
if ($qtys[$i] != "") {
$itemrec = MyItem::create([
'user_id' => Auth::id(),
'item_type_id' => $ids[$i],
'my_property_room_id' => 5,
'my_property_id' => session('g_my_property_id'),
'name' => $names[$i],
'qty' => $qtys[$i],
'comments' => $comments[$i],
'client_id' => 0,
'version' => 1,
'date_effective_from' => now(),
'status' => 'ACTIVE'
]);
看到那一列 my_property_room_id 了吗?好吧,出于某种原因,无论我传递什么值,它总是在 MySQL 中存储一个空值(无论是在变量中还是在最后一次尝试中,以确保实际传递一个值 - 在这个案例 5).
我可以向 MySQL 发送这样的查询
update my_items set my_property_room_id = 5 where user_id=6;
并且该列随后直接保存值 5 - 因此这不是问题,例如外键违规。
发送到 Eloquent 模型的所有其他列设置均按预期存储。
我绞尽脑汁想知道这里的可能原因 - 没有错误消息被发送回浏览器并且正在写入预期数量的记录 - 只是这一列未填写。
有人知道可能是什么原因吗?
提前致谢,
杰里米
您还必须将 属性 添加到模型类的 $fillable
数组中。
// app/Models/MyItem.php
protected $fillable = ['my_property_room_id'];
或者,您可以这样做:
// app/Models/MyItem.php
protected $guarded = [];
注意最后一个选项应该只在你不打算批量分配用户输入时使用,这样你就不会遭受注入攻击。
这里是奇数。我有一个包含许多列的 table(不寻常,是吗?),并且正在通过 Laravel (v9) 中的 Eloquent 模型创建一行。这是代码片段
while ($i <= $numrecs - 1) {
// if the qty is non-zero then we want to store it
if ($qtys[$i] != "") {
$itemrec = MyItem::create([
'user_id' => Auth::id(),
'item_type_id' => $ids[$i],
'my_property_room_id' => 5,
'my_property_id' => session('g_my_property_id'),
'name' => $names[$i],
'qty' => $qtys[$i],
'comments' => $comments[$i],
'client_id' => 0,
'version' => 1,
'date_effective_from' => now(),
'status' => 'ACTIVE'
]);
看到那一列 my_property_room_id 了吗?好吧,出于某种原因,无论我传递什么值,它总是在 MySQL 中存储一个空值(无论是在变量中还是在最后一次尝试中,以确保实际传递一个值 - 在这个案例 5).
我可以向 MySQL 发送这样的查询
update my_items set my_property_room_id = 5 where user_id=6;
并且该列随后直接保存值 5 - 因此这不是问题,例如外键违规。
发送到 Eloquent 模型的所有其他列设置均按预期存储。
我绞尽脑汁想知道这里的可能原因 - 没有错误消息被发送回浏览器并且正在写入预期数量的记录 - 只是这一列未填写。
有人知道可能是什么原因吗?
提前致谢, 杰里米
您还必须将 属性 添加到模型类的 $fillable
数组中。
// app/Models/MyItem.php
protected $fillable = ['my_property_room_id'];
或者,您可以这样做:
// app/Models/MyItem.php
protected $guarded = [];
注意最后一个选项应该只在你不打算批量分配用户输入时使用,这样你就不会遭受注入攻击。