3

レコードを更新するこの関数がありますが、失敗して「主キー ID が行にないか、null です」というメッセージを送信できません。どうすれば修正できますか?

public static function update_child($data)
{
    try
    {
        $update= ORM::for_table("dm_child",DM_TAG)
                        ->where_equal($data["id_child"]);

        $update -> set(array(
            "gender" => $data["gender"]
            "age_year" =>$data["year"]
            "age_month" => $data["month"]

        ));
        $update -> save();
    }
    catch(PDOException $ex)
    {
        ORM::get_db()->rollBack();
        throw $ex;
    }
}
4

7 に答える 7

2

答えは、テーブルごとにクエリのデフォルトの「id」列名を変更するために @iNpwd によって提供されたものです。

ORM::configure('id_column_overrides', array(
    'table_name'  => 'column_name_used_as_id',
    'other_table' => array('pk_1', 'pk_2') // a compound primary key
));

クエリを認識させるために私を悩ませていたのは、ORM::configure値を変更していた場所でした。私は正しいファイルにいませんでした。

具体的には ID 列構成へのより深いリンク: http://idiorm.readthedocs.org/en/latest/configuration.html#id-column

于 2015-11-13T15:37:11.007 に答える
1

2分前にこの問題に遭遇しました。本当の理由は、クエリで選択 ID フィールドを忘れたことです。デモ:

$demo = ORM::for_table('demo')->select('field_test')->find_one($id);
$demo->field_test = 'do';
$demo->save();

エラーが発生します。への変更 :

$demo = ORM::for_table('demo')->select('field_test')->select('id')->find_one($id);

それは問題を解決します。

ドキュメント内のヒント: https://github.com/j4mie/idiorm/blob/master/test/ORMTest.php

/** * これらの次の 2 つのテストが必要なのは、いくつかのフィールドを select() した場合、 * 主キーではなく、主キーを * 更新/削除クエリで使用できないためです - issue #203 を参照してください。id * MockPDOStatement->fetch() は常に ID を返すため、ここで主キーを * 以外のものに変更する必要があります。*/

于 2015-04-07T16:10:52.327 に答える
0

私はイディオムを使ったことがないので、私の答えがうまくいくとは限りませんが、このページと「レコードの更新」の下に、似ているが少し異なる例があります。

// The 5 means the value of 5 in the primary-key column
$person = ORM::for_table('person')->find_one(5);

// The following two forms are equivalent
$person->set('name', 'Bob Smith');
$person->age = 20;

// This is equivalent to the above two assignments
$person->set(array(
    'name' => 'Bob Smith',
    'age'  => 20
));

// Syncronise the object with the database
$person->save();
于 2015-01-12T22:52:44.630 に答える