1

在 afterSave 中,获取有关$this.

例如。如果我debug($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 (使用 like 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 回答