【问题标题】:CakePHP nested associations, empty records errorsCakePHP 嵌套关联,空记录错误
【发布时间】:2014-09-11 00:40:54
【问题描述】:

我有几个表像树一样连接(hasMany):1 -> 2 -> 3。 表一、表二、三的记录很少。

我正在使用 CakePHP 从表 1 中获取所有数据,表 2 与表 2 相连,表 2 与表 3 相连。 但是表1中很少有记录在表2中没有连接记录。在表2中也是如此,有些记录在表3中没有连接记录。

对于第二种情况,脚本可以正常工作。我得到这样的东西: 1 -> 2 -> 空。但在第一种情况下,当数据看起来类似于: 1-> empty -> empty 我得到表 3 不存在的错误。

是否有任何解决方案可以跳过此错误并获得格式精美的关联表作为对我的查询的返回?

$options = array(
        'conditions' => array(
            'Table1.id' => $table1_ids
        ),
        'contain' => array(
            'Table2' => array(
                'conditions' => array(
                    'id' => $table2_ids
                ),
                'Table3' => array(
                    'conditions' => array(
                        'date_end >' => date('Y-m-d H:i:s')
                    ),
                    'fields' => array('id'),
                ),
                'fields' => array()
            ),
        ),
        'fields' => array('id', 'name')
    );
    $this->Table1->recursive = -1;
    $table1 = $this->Table1->find('all', $options);

【问题讨论】:

  • 如果不查看实际执行脚本的代码就很难知道。
  • 您是如何获得这些记录的?可以分享一下代码吗?
  • 我已经添加了代码。对此的解决方案可能是针对表 2 中的每条记录,我应该检索表 3 中的记录。然而,这意味着对数据库的大量查询......
  • 奇怪的是,即使对于表 1 中的某些记录,其中 Table1 -> empty -> empty,它仍然可以正常工作。我无法理解 CakePHP。对于小型应用程序来说,这是一个很好的框架,但对于更高级的应用程序,它就跟不上。
  • 我得到 Table3 不存在的数据库错误(?!)。我不知道为什么...

标签: cakephp associations nested-queries


【解决方案1】:

这并不是真正要责备 cakephp,而是您不了解 contain 的作用。

你要找的是left joins,这实际上在contain的文档中有所暗示。

【讨论】:

  • 当我使用左连接时,我只从一个表中获取列。在 DebugKit 中,我可以看到连接的 SQL 查询仅从一个表中检索列。为什么?
  • 好的!我找到了这个link
  • 使用连接导致我们没有得到格式化的数据,我的意思是我们在表 1 中有多个相同的记录:[1] -> [2] [1] -> [2] CakePHP 中有没有快速函数来排序这些数据并分配所有匹配从表 2 到一个关联表的记录:[1] -> { [2] [2] }
  • 返回的数据是格式化的,只是不是你想要的格式。您可以使用 cake 的 Hash 实用程序类的成员或自己遍历它们并“修复”它们以按照您想要的方式显示。
  • 你能给我一些提示我应该使用Hash的哪个函数吗?我认为他们都不符合这个问题......但我可能是错的
猜你喜欢
  • 2021-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多