Laravel 5的Eloquent模型不允许我更新

4
我已经设置好数据库中的邀请表,并且在其他方面也使用它,例如添加更多内容...
我的目标是:更新第一条记录中的一个字段为新值:
我尝试过:
$invitation = new MemberInvitation();
$invitation1 = $invitation->find(1);
$invitation1->status = 'clicked';
$invitation1->save();

还有:
$invitation1 = \App\Model\MemberInvitation::find(1);
$invitation1->status = 'clicked';
$invitation1->save();

两者都以以下内容结束:
Creating default object from empty value

编辑:

这段代码有效地更新了我的记录,但我无法通过Eloquent的模型来执行它:

\DB::table('member_invitations')->where('id', '=', $member_invitation->id)
                    ->update(array('status' => 'clicked', 'member_id' => $member->id));

我错过了什么?

2
实际上有第一条记录吗?通常情况下,如果 find(1) 没有返回记录,你会得到这个问题。尝试使用 findOrFail 而不是 find,看看是否会抛出异常。 - ceejayoz
这个代码可行:\DB::table('member_invitations')->where('id', '=', $member_invitation->id) ->update(array('status' => 'clicked', 'member_id' => $member->id)); 所以我猜数据库是完好无损的。 - JasonGenX
记录是否被软删除(即deleted_at是否为非NULL值)? - ceejayoz
3个回答

2

试试这个。

$invitation = MemberInvitation::findOrFail(1);
$invitation->status = 'clicked';
$invitation->save();

如果这不起作用,请展示您的模型。

我在 Builder.php 的第 125 行收到了 "ModelNotFoundException: No query results for model [App\Model\MemberInvitation]" 的错误信息,但是如果使用 \DB::table 方法,为什么会出现这种情况呢? - JasonGenX
这个模型类非常简单,几乎是空的:class MemberInvitation extends Model { protected $fillable = []; /**
  • 模型使用的数据库表名。
  • @var string */ protected $table = 'member_invitations'; }
- JasonGenX
我怀疑你的行被软删除了,因为在 deleted_at 列中有一个非空值。 - ceejayoz

1
find(1)并不是指“给我第一条记录”,而是指“给我id = 1的第一条记录”。如果没有id为1的记录,find(1)将返回null。当您尝试在null上设置属性时,您会收到一个PHP警告消息“从空值创建默认对象”。如果您只想获取第一条记录,可以使用first()方法:
$invitation = \App\Model\MemberInvitation::first();

如果您需要获取特定id的记录,可以使用find()方法。例如,将您的工作DB代码转换为Eloquent,如下所示:
$invitation = \App\Model\MemberInvitation::find($member_invitation->id);
$invitation->status = 'clicked';
$invitation->member_id = $member->id;
$invitation->save();

0

根据您5月15日的回复,答案显而易见。

您模型中的“fillable”属性为空。请确保在该数组中放置“status”。不在此数组中的属性无法被修改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接