我正在尝试使用 Eloquent ORM 更新 SQL Server 数据库中的表,但由于某种原因,更新从未提交。由于它是一个遗留数据库,我以以下方式定义了我的模型(因为表和键不完全符合预期的约定,并且时间戳列未命名为 updated_at、created_at)
class User extends Eloquent {
public static $key = 'UserID';
public static $table = 'User';
public static $timestamps = false;
}
我试图运行的代码就像这样简单:
$user = User::find($userid);
$user->password = $password;
$user->salt = $salt;
$user->resettoken = $reset_token;
$user->save();
我已经调试了代码,可以看到用户对象被正确检索,并且用户对象的属性在分配新值时被更新。但是,save 方法不会保留数据。
不过,使用 Fluent 就像款待一样。这适用于例如:
$affected = DB::table('User')
->where('UserID', '=', $userid)
->update(array(
'password' => $password,
'salt' => $salt,
'resettoken' => $reset_token
)
);
但是使用 Eloquent 会很好。是什么绊倒了我?
更新:运行代码如皮埃尔所说:
<?php
$test = new User();
die(var_dump($test));
回报:
object(User)[39]
public 'attributes' =>
array (size=0)
empty
public 'original' =>
array (size=0)
empty
public 'relationships' =>
array (size=0)
empty
public 'exists' => boolean false
public 'includes' =>
array (size=0)
empty
User 对象实例的转储显示所有属性,即该对象包含所有属性,包括新值,但没有任何内容保存到数据库:
$user = User::find($userid);
$user->password = $password;
$user->salt = $salt;
$user->resettoken = $reset_token;
$user->save();
使用此语法没有区别:
$user = User::where_UserID($userid)->first();
解决方案:
必须使用模型中键的小写名称,然后才能正常工作。