【问题标题】:CakePHP: finding data after saveCakePHP:保存后查找数据
【发布时间】:2014-10-09 16:06:35
【问题描述】:

我正在研究一种编辑方法。保存数据后,将发送一封电子邮件,其中包含编辑期间所做的更改。除了一个令人愤怒但至关重要的错误之外,一切都正常。这里非常简单地提炼出来:

$data = $this->SupportTicket->readForView($st_id);
$this->SupportTicket->id = $st_id;
if ($this->SupportTicket->save($this->request->data)) {

    //call custom model method to pull view data
    $data = $this->SupportTicket->readForView($st_id);
    //do something with this data

}

问题是 $data 带有预保存数据。所以我然后尝试用新数据做的事情不起作用。 我不能只使用 $this->request->data 因为它没有我想要的完整数据。

但是保存确实有效。如果我刷新同一条记录的视图方法,它会显示为已更新。所以它正在保存,但是当我在保存后进行查找时,它会给我旧数据。

有什么想法吗?

更新:findById($st_id) 不会发生这种情况,所以它一定与我的自定义方法有关。代码:

public function readForView($id)
{
    $data = $this->find('first', array(
        'conditions' => array(
            'SupportTicket.id' => $id
        ),
        'contain' => array(
            'User',
            'Owner'
        )
    ));

    if (empty($data)) {
        throw new notFoundException('Ticket not found');
    }

    $data['SupportTicket']['type_long'] = $this->getLongType($data['SupportTicket']['type']);
    $data['SupportTicket']['status_long'] = $this->getLongStatus($data['SupportTicket']['status']);
    $data['SupportTicket']['name'] = 'Support Ticket #' . $data['SupportTicket']['id'] . ' - ' . $data['SupportTicket']['title'];

    return $data;
}

将此方法中的代码复制到控制器中会得到相同的结果。

【问题讨论】:

  • 你有没有机会使用query caching (Model::$cacheQueries)?
  • 同意,@ndm - 必须发生某种缓存。
  • 是的,就是这样!我最初没有编写应用程序,几乎没有在 AppModel 中查看。
  • @ndm 如果您将其作为答案发布,我将很乐意接受。
  • 您建议以什么优雅的方式在逐个查找的基础上关闭它?我发现了这个,但它是 Cake 1.x 特有的,而且我的 OOP-fu 不够强大,无法在 2.x 中找到它。 bakery.cakephp.org/articles/dennis.hennen/2009/09/15/…

标签: cakephp cakephp-2.3


【解决方案1】:

我发现这很有帮助:https://edivad.wordpress.com/2008/04/15/cakephp-disable-model-queries-caching/

按型号:

class Project extends AppModel {
    var $cacheQueries = false;
...

按功能:

function someFunction {
  $this->Model->cacheQueries = false;
...

【讨论】:

    【解决方案2】:

    尝试使用最后一个插入 ID

    $id=$this->getLastInsertID();

    公共函数 readForView($id)

    【讨论】:

    • 这没用。我不想要 UPDATE 方法的最后一个插入 ID。我已经知道 $id。解决方案在主要问题的 cmets 中。
    猜你喜欢
    • 2011-09-14
    • 2013-09-24
    • 1970-01-01
    • 2012-08-08
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多