【问题标题】:How could I create a sub-query in cakePHP?如何在 cakePHP 中创建子查询?
【发布时间】:2013-05-04 11:34:14
【问题描述】:

如何使用 find 方法在 cakePHP 中创建子查询?例如:

SELECT *, (SELECT COUNT(*) FROM table2 WHERE table2.field1 = table1.id) AS count
FROM table1
WHERE table1.field1 = 'value'

!!! table2.field1 = table1.id !!!

【问题讨论】:

    标签: mysql cakephp cakephp-model cakephp-2.3


    【解决方案1】:

    只是为了补充,您可以使用 Cake 的 ORM 构建子查询。它会更容易。请阅读CakePHP retrieving data doc

    一般你可以使用DataSource对象的buildStatement()方法。您可以保存所有逻辑,包括分页等。

    【讨论】:

      【解决方案2】:

      您可以通过以下两种方式之一:

      1。使用 $this->Model->query(...)

      这允许您使用上面发布的查询直接执行 SQL,但请注意,如果数据库架构发生更改,它会使您的应用程序变得非常脆弱。可能是最快的。(Documentation)

      例子

      $this->Model1->query("SELECT * FROM model;");
      

      2。分开通话

      这可能不如选项 1 快,但它确实使您能够将查询分解为多个步骤。您也不太可能获得 SQL 注入,这是选项 1 的潜在风险。

      例子

      $model1s = $this->Model1->find
      (
          'all', 
          array
          (
              'conditions' => array('Model1.field1' => 'value')
          )
      );
      foreach($model1s as $model1)
      {
          $model1['model2_count'] = $this->Model2->find
          (
              'count', 
              array
              (
                  'conditions' => array
                  (
                      'Model2.field1' => $model1['id']
                  )
              )
           );
      }
      

      【讨论】:

        猜你喜欢
        • 2015-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        • 2020-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多