1

afterSave 内で、 に関する情報を取得する最良の方法は何ですか$this

例えば。Idebug($this->read())の場合、作業している現在のレコード (関連モデルなど) について知る必要があるすべてを取得します。

array(
    'Comment' => array(
        'id' => '12',
        'user_id' => '38'
        'body' => 'test',
        'created' => '2013-04-11 18:56:26',
        'modified' => '2013-04-11 18:56:26'
    ),
    'User' => array(
        'password' => '*****',
        'id' => '38',
        'username' => 'example',
        'created' => '2013-01-26 18:25:39',
        'modified' => '2013-01-26 18:25:39',
        'first_name' => '',
        'last_name' => ''
    )
)

しかし、それは私が再びデータベースを照会しているという意味ではありませんか? $thisこのすべての情報がすでに含まれているべきではありませんか?

の結果を取得する適切な方法は何ですか$this->read()、またはこれが正しい方法ですか?

4

2 に答える 2

2

保存したばかりのレコードについて必要な情報に応じて、適切な方法 ( $this->read) になります。たとえば、挿入を行っていて、 $data (のように使用) が次の場合:Comment->save($data)

array(
    'Comment' => array(
        'id' => '12',
        'user_id' => '38'
        'body' => 'test',
        'created' => '2013-04-11 18:56:26',
        'modified' => '2013-04-11 18:56:26'
    ),
    'User' => array(
        'password' => '*****',
        'id' => '38',
        'username' => 'example',
        'created' => '2013-01-26 18:25:39',
        'modified' => '2013-01-26 18:25:39',
        'first_name' => '',
        'last_name' => ''
    )
)

つまり、保存したばかりの同じ$this->data情報が引き続き保持されます。$this->dataの後にのみ false に設定されますafterSave

ただし、次のようなことをすると

$this->Comment->saveField('body', 'othertest');

$this->dataafterSaveの配列には、次のようなもののみが含まれます

Array
(
    [id] => 6
    [body] => 'othertest'
    [modified] => 2013-04-11 15:17:45
)

つまり、save() でパラメーターとして渡されたデータに関係なく、モデルに関連するすべての情報を取得したい場合は、$this->read() (または find()) を実行する必要があります。

于 2013-04-11T19:28:02.080 に答える
0

次のようにデータにアクセスできるはずです。

public function afterSave($var = null){
    parent::afterSave($var);
    echo '<pre>';
    print_r($this->data);
    echo '</pre>';
    die();
}

そのコードを試して、出力を見てください。これにより、投稿されたデータにアクセスできるようになります。これは、保存が成功した場合にレコードと一致するはずです。また、使用している CakePHP のバージョンと、何をしようとしていますか?

読んでも大丈夫です。

于 2013-04-11T19:21:13.400 に答える