我正在尝试使用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();
我调试了代码,可以看到正确检索User对象,并在分配新值时更新User对象的属性。但是,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();
解决方案:
必须在模型中使用键的小写名称,然后才能工作。
答案 0 :(得分:1)
雄辩的更新看起来很不错。可能你的$ key无法正常工作:
public static $key = 'UserID';
什么是Laravel核心的版本?我知道有些用户会支持以前的版本。
您可以使用以下方式验证:
<?php
$test = new User();
die(var_dump($test));
我将提到使用过的主键(仅限laravel 4)
最后,试试:
$user = User::where_UserID($userid)->first();
$user->password = $password;
$user->salt = $salt;
$user->resettoken = $reset_token;
$user->save();
答案 1 :(得分:1)
请务必在模型中使用键名的小写名称。
这是错误的:
class User extends Eloquent {
public static $key = 'UserID';
}
这可以按预期工作:
class User extends Eloquent {
public static $key = 'userid';
}