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 = [];

注意最后一个选项应该只在你不打算批量分配用户输入时使用,这样你就不会遭受注入攻击。