使用Eloquent更新行时,数据不会保留

时间:2013-01-26 06:33:48

标签: sql-server laravel eloquent

我正在尝试使用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();

解决方案:

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

2 个答案:

答案 0 :(得分:1)

雄辩的更新看起来很不错。可能你的$ key无法正常工作:

public static $key  = 'UserID';

什么是Laravel核心的版本?我知道有些用户会支持以前的版本。


修改 Quality Team about it...

您可以使用以下方式验证:

<?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';
}