Sql server 使用Elount更新行时未持久化数据

Sql server 使用Elount更新行时未持久化数据,sql-server,laravel,eloquent,Sql Server,Laravel,Eloquent,我试图使用雄辩的ORM更新SQL Server数据库中的表,但由于某些原因,更新从未提交。由于它是一个遗留数据库,我以以下方式定义了我的模型(因为表和键不完全符合预期约定,时间戳列未命名为updated_at,created_at) 我尝试运行的代码如下所示: $user = User::find($userid); $user->password = $password; $user->salt = $salt; $user->resettok

我试图使用雄辩的ORM更新SQL Server数据库中的表,但由于某些原因,更新从未提交。由于它是一个遗留数据库,我以以下方式定义了我的模型(因为表和键不完全符合预期约定,时间戳列未命名为updated_at,created_at)

我尝试运行的代码如下所示:

    $user = User::find($userid);
    $user->password = $password;
    $user->salt = $salt;
    $user->resettoken = $reset_token;
    $user->save();
我已经调试了代码,可以看到用户对象被正确地检索,并且当分配了新值时,用户对象的属性被更新。但是,save方法不会持久化数据

不过,使用Fluent可以像treat一样工作。例如:

$affected = DB::table('User')
                ->where('UserID', '=', $userid)
                ->update(array(
                    'password' => $password, 
                    'salt' => $salt, 
                    'resettoken' => $reset_token
                )
            );
但最好使用雄辩的语言。我被什么绊倒了

更新:运行Pierre所说的代码:

<?php
$test = new User();
die(var_dump($test));
用户对象实例的转储显示所有属性,即此对象包含所有属性,包括新值,但未将任何内容保存到数据库:

$user = User::find($userid);
$user->password = $password;
$user->salt = $salt;
$user->resettoken = $reset_token;
$user->save();
使用此语法没有任何区别:

$user = User::where_UserID($userid)->first();
解决方案:


必须在模型中使用键的小写名称,然后它才能工作。

有说服力的更新看起来不错。希望您的$key no正常工作:

public static $key  = 'UserID';
什么,你的Laravel核心版本是什么?我知道有些用户用以前的版本重新报告了这一点


编辑:

您可以使用以下方法对此进行验证:

<?php
$test = new User();
die(var_dump($test));

请确保在模型中使用键名称的小写名称

这是错误的:

class User extends Eloquent {
    public static $key  = 'UserID';
}
这与预期的效果一样:

class User extends Eloquent {
    public static $key  = 'userid';
}

必须有一条错误消息或日志条目,请也发布。@dualed-当使用雄辩的更新语法时,没有任何错误消息。它只是静静地过去。我已经调试了代码,我可以看到属性是如何填充的。在模型类的save方法中,$result始终为0。即使我将$result设置为1,也不会将任何内容持久化到数据库中。save方法将始终运行查询,除非它不是脏的。既然你说你已经调试了它,我想它已经通过了。因此,在某个点上可能会出现PHP错误或SQL错误。既然您说没有错误消息,那么逻辑上的结论是必须有一个日志条目。@dualed-谢谢您的输入。我在php.ini中将display_errors设置为true,没有弹出任何内容。在探查器栏中运行两个查询:
从[User]中选择TOP 1*,其中[UserID]=“162”
更新[User]设置[password]=“password”,[salt]=“salt”中[UserID]=”
注意更新中的空UserID值。您是对的,密钥是以混合大小写定义的,就像数据库中的密钥名一样。但是,必须使用小写名称,否则将无法使用+1感谢您的努力。有关信息,现在由
$user = User::where_UserID($userid)->first();
$user->password = $password;
$user->salt = $salt;
$user->resettoken = $reset_token;
$user->save();
class User extends Eloquent {
    public static $key  = 'UserID';
}
class User extends Eloquent {
    public static $key  = 'userid';
}