【问题标题】:cakePHP- sql syntax based query to cake's array based querycakePHP- 基于 sql 语法的查询到 cake 的基于数组的查询
【发布时间】:2014-02-21 00:36:04
【问题描述】:

我需要从我的一个控制器执行此查询:

SELECT  `tel_no` 
        FROM  `donors` AS  `dnr` 
        LEFT JOIN  `donations` AS  `dn` ON  `dnr`.id =  `dn`.donor_id
        LEFT JOIN  `donation_methods` AS  `dm` ON  `dn`.donation_method_id =  `dm`.id
        WHERE  NOW() >= DATE_ADD(dn.created, INTERVAL dm.recovery_time DAY)

您可能会注意到,此查询涉及 3 个模型。我正在努力解决如何使用上面的蛋糕生成基于数组的查询。

 $elligibleDonors = $this->Donor->find('all', array(
        'fields' => array('Donor.tel_no', 'Donor.email'),
        'conditions' => array('NOW() >= Donation.created + Donation_method.recovery_time'),
        'recursive' => 2
        ));
         $this->set('elligibleDonors', $elligibleDonors);

我试过了,但是一个错误指出列不存在 这当然是一个语法错误,我无法弄清楚!

[编辑]

关系船是

捐赠者有很多捐赠 捐赠属于捐赠者 捐赠属于捐赠方法 DonationMethod hasMany Donation

$joins = array(
           array('table'=>'donations', 
                 'alias' => 'Donation',
                 'type'=>'left',
                 'conditions'=> array(
                 'Donation.donor_id = Donor.id'
           )),
           array('table'=>'donation_methods', 
                 'alias' => 'DonationMethod',
                 'type'=>'left',
                 'conditions'=> array(
                 'DonationMethod.id = Donation.donation_method_id'
           ))
         );

我发现这就是我想要的,但是我应该将“WHERE”子句条件放在这段代码中的什么位置呢?

【问题讨论】:

  • 为什么不使用查询本身,使用表别名以便蛋糕将其作为标准数组进行排序?
  • 你的意思是,使用 query() 方法?如果是这样,那么sql注入呢。 PS。我需要根据用户过滤添加条件。
  • 是的,query()。一般来说,蛋糕会清理任何输入。它将使用蛋糕的对象来完成 - 你可以称自己为(检查 api)。至于错误 - 哪一列?!?!请提供更多信息。像表结构和确切的错误

标签: mysql cakephp


【解决方案1】:

如果默认 find 不适合您的需要,只需在 Cake 中使用 join 选项。

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tables

【讨论】:

  • 我刚刚编辑了我的问题!你能看看吗?谢谢
  • 对于条件,只需在您的$options 数组中添加一个conditions 选项。查看链接中的第二个示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多