首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cakephp中的mysql between语句

cakephp中的mysql between语句
EN

Stack Overflow用户
提问于 2017-03-16 18:20:54
回答 2查看 274关注 0票数 1

我正在尝试从表allowances中检索行,其中当前日期位于两个字段date_from和date_to之间。下面是sql查询:

代码语言:javascript
复制
SELECT * FROM `allowances` WHERE desg_id=4  AND CURDATE() between date_from and date_to

现在,如何在cakephp2 find中编写此查询。我正在尝试这样做:

代码语言:javascript
复制
$allowance = $this->  Allowance->find('all',array(
'conditions'=>array(
'? BETWEEN ? AND ?'=>array( date('Y-m-d'), 'Allowance.date_from', 'Allowance.date_to')
)));

我得到了sql输出:

代码语言:javascript
复制
SELECT `Allowance`.`id`, `Allowance`.`date_from`, `Allowance`.`date_to`, FROM `db_demo`.`allowances` WHERE '2017-03-16' BETWEEN 'Allowance.date_from' AND 'Allowance.date_to'

这就是引号的问题。不幸的是,这个查询并不是working.whats错误。

EN

回答 2

Stack Overflow用户

发布于 2017-03-16 18:25:29

您可以尝试这样做:

代码语言:javascript
复制
$this->Order->find('all', array(
    'conditions' => array(
        'id' => $id,
        'created >=' => $start_date,
        'created <=' => $end_date . ' 23:59:59',
        'my_field LIKE' => '%whatever%'
));
票数 1
EN

Stack Overflow用户

发布于 2017-03-17 01:15:41

您不能以这种方式绑定标识符,因为绑定的字符串以字符串文字结尾,这在生成的查询中可以看到。在条件左侧的SQL代码片段中添加标识符:

代码语言:javascript
复制
'? BETWEEN Allowance.date_from AND Allowance.date_to' => date('Y-m-d')

或者使用表达式(尽管这并不值得这么麻烦):

代码语言:javascript
复制
$dataSource = $this->Allowance->getDataSource();

// ...

'? BETWEEN ? AND ?' => array(
    date('Y-m-d'),
    // note that using expressions is unsafe for user input!
    $dataSource->expression('Allowance.date_from'),
    $dataSource->expression('Allowance.date_to')
)

另请参阅

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42831196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档