【问题标题】:cakephp query with many tables带有许多表的 cakephp 查询
【发布时间】:2012-09-19 06:25:14
【问题描述】:

我有一个用 cakephp 2.0 开发的网站,我有一些相关的表,这里是一个例子: 这是我的关系:

ingredients (id,name) 有很多版本

ingredient_properties(id,property_id,version_id) 属于 到属性、版本

properties (id,name,value,group_id,unit_id) 有很多 成分属性和属于组,单位

groups (id,name) 有很多属性

units (id,name) 有很多属性

versions (id,name,ingredient_id,active) 有很多成分属性,属于成分。

我在成分Controller.php 中,我想检索所有这些数据,其中Version.active=1Version.ingredient_id=2

这是我的查询:

$this->set(
        'ingredient',
        $this->Ingredient->Version->find('all', array(
            'recursive' => 2,
            'conditions' => array(
                'Version.active' => 1,
                'Version.ingredient_id' => 2
             )
        ))
);

我有很多很多这样的查询,我想知道递归 2 是否是检索我解释过的表的所有数据的最佳方法,或者有更快的更好方法(就查询速度而言实施)。 我希望有人可以帮助我优化我的代码,因为此查询有效,但我不知道它是否是检索许多相关表的数据的更好方法。

谢谢。

【问题讨论】:

  • 你看过内置的可包含行为吗?
  • 谢谢,我会立即阅读该页面,我想绝对优化我的查询
  • 有人可以用我的表格举例吗?

标签: php cakephp cakephp-model


【解决方案1】:

如果要检索这么多数据,使用'recursive' => 2 并不是最好的方法。我相信它会产生太多的查询。可包含行为具有相同的缺点。对我来说最好的方法是即时联系unbind models associationsconstruct table joins。你可以看一个例子here。但是您需要了解一些 SQL 才能理解您的工作。

【讨论】:

  • 我对 sql 很了解,但最好是构造表连接或使用可包含的行为?考虑一下,如果我必须进行连接,我必须编写更多代码而不是可包含
  • 如果您想要更少的代码,请使用 Containable。如果您想要更快的查询,请使用联接。
  • 应该会更快,但我没有做过任何对比测试。出于我的目的,当使用连接时,Containable 生成了太多查询,我可以通过单个查询检索我需要的所有内容。
猜你喜欢
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多