Laravel / PHP / MySQL -为什么一列存储为空值,尽管通过Eloquent模型提供了一个值?<



此处为奇数。我有一个有许多列的表(不寻常的,嗯?),并通过在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模型的所有其他列设置都按预期存储。

对于这里可能的原因,我很挠头——没有错误消息被发送回浏览器,并且正在写入预期的记录数量——只是这一列仍然未填充。

有谁知道是什么原因吗?

提前感谢,杰里米。

您还必须将该属性添加到Modelclass的$fillable数组中。

// app/Models/MyItem.php
protected $fillable = ['my_property_room_id'];

或者,你可以这样做:

// app/Models/MyItem.php
protected $guarded = [];

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

最新更新