【问题标题】:I need to convert a mysql Query to CakePHP conditions我需要将 mysql 查询转换为 CakePHP 条件
【发布时间】:2011-10-13 17:32:49
【问题描述】:

我无法理解如何使用 find 函数将其转换为本机 cakephp 查询。任何帮助将不胜感激。

SELECT * FROM `seo_web_directories` 
LEFT JOIN (SELECT * FROM `seo_site_statuses` 
  WHERE site_id = $queryData) as t1 
ON `seo_web_directories`.id = t1.web_directory_id

变量是调用函数时设置的动态值

【问题讨论】:

  • 我目前正在使用查询函数来传递上面的查询,但是我需要使用分页助手。因此,如果您能解释如何在 paginate 中使用这种查询,我将不胜感激,但我尝试过的每篇文章和方法似乎都不起作用......

标签: php mysql cakephp-1.3


【解决方案1】:

您应该找到一种方法直接将此查询与模型一起使用,而不是使用次优的 ORM。试试看Model::query()方法[source]

ORM(尤其是实现 ActiveRecord 的 ORM)不应该用于连接。他们最终会为您添加到 JOIN 的每个新表执行循环。

【讨论】:

    【解决方案2】:
    $this->WebDirectory->find('all', array('conditions' => array('verified' => 0),'joins' => array(
      array(
        'table' => 'seo_site_statuses',
        'type' => 'left',
        'alias' => 't1',
        'conditions' => array('WebDirectory.id' => ' t1.web_directory_id', 't1.site_id =' . $id)))));
    

    好吧,这是我能够弄清楚的转换后的查询...也许再举一个例子可以帮助其他人弄清楚如何做到这一点...

    但是我最终使用了直接查询,因为上述发现需要太多内存和时间来进行上述答案中提到的递归。

    function paginate($id, $recursive = null, $extra = array(), $limit = 50, $page = 1){
      $page = ($page * $limit) - $limit;
    
      if(!empty($extra)){
        $OrderBy = "ORDER BY ";
        foreach ($extra as $key => $value) {
    
          $OrderBy .= $key . " " . $value;
        }
      }else{
        $OrderBy = "ORDER BY t2.page_rank DESC";
      }
    
      return $this->query('SELECT * FROM `seo_web_directories` as t2 
      LEFT JOIN (SELECT * FROM `seo_site_statuses` WHERE site_id = ' . $id['Site.id'] . ') as t1
      ON `t2`.id = t1.web_directory_id WHERE t2.`verified` = 0 ' . $OrderBy . ' LIMIT ' . $page . ', ' . $limit);
    
     // return $this->WebDirectory->find('all', compact('conditions', 'joins', 'limit', 'page', 'recursive'));
    }
    
    function paginateCount($conditions = null, $recursive = 0, $extra = array())
    {
    return $this->WebDirectory->find('count', array('conditions' => array('verified' => 0)));
    }
    

    【讨论】:

      【解决方案3】:

      这也会有所帮助。输入你的 Mysql 并转换。这将自动将查询转换为 cakephp 格式,您可以轻松理解。

      http://dogmatic69.com/sql-to-cakephp-find-converter

      【讨论】:

        猜你喜欢
        • 2019-12-10
        • 1970-01-01
        • 1970-01-01
        • 2013-05-13
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多