0

EloquentORMを使用してSQLServerデータベースのテーブルを更新しようとしていますが、何らかの理由で更新がコミットされません。これはレガシーデータベースであるため、次の方法でモデルを定義しました(テーブルとキーが期待される規則に完全に準拠しておらず、タイムスタンプ列の名前が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();

解決:

モデルでキーの小文字の名前を使用する必要があります。そうすれば機能します。

4

2 に答える 2

1

モデルのキー名には必ず小文字の名前を使用してください。

これは間違っています:

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

これは期待どおりに機能します。

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