0

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

解决方案:

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

4

2 回答 2

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();
于 2013-01-26T09:20:00.007 回答
1

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

这是错误的:

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

这按预期工作:

class User extends Eloquent {
    public static $key  = 'userid';
}
于 2013-01-28T07:35:55.040 回答