在模型回调中获取模型数据的正确方法

时间:2013-04-11 19:06:26

标签: cakephp cakephp-2.0

在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()结果的正确方法是什么,或者这是正确的方法?

2 个答案:

答案 0 :(得分: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之后afterSave设置为false。

但是,如果您执行类似

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

afterSave中的$this->data数组只包含类似

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

换句话说,如果你想获得 all 与模型相关的信息而不管在save()中作为参数传递的数据,你将不得不做一个$ this-> read()(或find())。

答案 1 :(得分:0)

你应该能够像这样访问数据:

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

尝试该代码并查看输出结果。这将使您可以访问已发布的数据,如果保存成功,则应与记录匹配。你还在使用什么版本的CakePHP以及你想做什么?

虽然阅读很好。