首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CakePHP遗漏了查询语句

CakePHP遗漏了查询语句
EN

Stack Overflow用户
提问于 2015-06-07 13:14:41
回答 2查看 34关注 0票数 1

我遇到了一个问题,我在Cakephp中找到了一个用于查找日历应用程序中忙着的用户的方法。然而,当我查看MYSQL查询时,它看上去并不正确。

查找声明:

代码语言:javascript
运行
复制
$result = $this->EventsUser->find('all',array('conditions'=>array(
                    'OR' =>array( 
                            'AND' => array(
                                    'Event.start >=' => $search_from,
                                    'Event.end <=' => $search_to),
                            'AND' =>array(
                                    'Event.end >' => $search_from,
                                    'Event.end <=' => $search_to),
                            'AND' =>array(
                                    'Event.start >=' => $search_from,
                                    'Event.start <' => $search_to)

                    ),
                    'User.is_resource'=>1

            ),
                    'group'=>array('EventsUser.user_id')
            ));

生成以下MYSQL查询:

代码语言:javascript
运行
复制
SELECT `EventsUser`.`id`, 
   `EventsUser`.`event_id`, 
   `EventsUser`.`user_id`, 
   `EventsUser`.`status_id`, 
   `User`.`id`, 
   `User`.`role_id`, 
   `User`.`username`, 
   `User`.`password`, 
   `User`.`first_name`, 
   `User`.`last_name`, 
   `User`.`photo`, 
   `User`.`photo_dir`, 
   `User`.`email`, 
   `User`.`phone`, 
   `User`.`location`, 
   `User`.`cost_ctr`, 
   `User`.`color`, 
   `User`.`text_color`, 
   `User`.`token`, 
   `User`.`active`, 
   `User`.`is_resource`, 
   `User`.`category_id`, 
   `User`.`description`, 
   `User`.`created`, 
   `User`.`modified`, 
   `User`.`location_id`, 
   `User`.`mobile_number`, 
   `User`.`resource_fuel_card_pin`, 
   `User`.`resource_email_contact`, 
   `User`.`resource_office_hours`, 
   `User`.`resource_post_code`, 
   `User`.`resource_payroll_number`, 
   `User`.`line_manager_email`, 
   ( Concat(`User`.`first_name`, ' ', `User`.`last_name`) ) AS `User__name`, 
   `Event`.`id`, 
   `Event`.`user_id`, 
   `Event`.`name`, 
   `Event`.`description`, 
   `Event`.`start`, 
   `Event`.`end`, 
   `Event`.`all_day`, 
   `Event`.`is_recurring`, 
   `Event`.`recurring_id`, 
   `Event`.`active`, 
   `Event`.`created`, 
   `Event`.`modified`, 
   `Event`.`owner`, 
   `Event`.`cost_cntr_id`, 
   `Event`.`txt_message`, 
   `Event`.`status_id`, 
   `Event`.`reason_for_hire_id`, 
   `Event`.`othersite_postcode`, 
   `Event`.`other_description`, 
   `Event`.`checksheet_id`, 
   `Event`.`declined_notes`, 
   `Event`.`hash` 
FROM   `car_pool`.`events_users` AS `EventsUser` 
   LEFT JOIN `car_pool`.`users` AS `User` 
          ON ( `EventsUser`.`user_id` = `User`.`id` ) 
   LEFT JOIN `car_pool`.`events` AS `Event` 
          ON ( `EventsUser`.`event_id` = `Event`.`id` ) 
WHERE  ( ( `Event`.`end` > '2015-06-07 13:01' ) 
     AND ( `Event`.`end` <= '2015-06-12 13:01' ) ) 
   AND `User`.`is_resource` = '1' 
GROUP  BY `EventsUser`.`user_id` 

似乎漏掉了陈述和陈述。当我从“查找”中移除和语句时,总是只执行最后一个查找。

有人有什么想法吗??

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-07 13:23:03

未正确定义OR数组。您已经创建了一个具有三个相同键(即‘和’)的数组。

而不是这样:

代码语言:javascript
运行
复制
'OR' =>array( 
            'AND' => array(
                          'Event.start >=' => $search_from,
                          'Event.end <=' => $search_to),
            'AND' =>array(
                          'Event.end >' => $search_from,
                          'Event.end <=' => $search_to),
            'AND' =>array(
                          'Event.start >=' => $search_from,
                          'Event.start <' => $search_to)
                )

应该是这样:

代码语言:javascript
运行
复制
'OR' =>array( 
            array('AND' => array(
                          'Event.start >=' => $search_from,
                          'Event.end <=' => $search_to)),
            array('AND' =>array(
                          'Event.end >' => $search_from,
                          'Event.end <=' => $search_to)),
            array('AND' =>array(
                          'Event.start >=' => $search_from,
                          'Event.start <' => $search_to))
                )
票数 1
EN

Stack Overflow用户

发布于 2015-06-07 13:20:02

PHP 101在关联数组中多次使用相同的键将覆盖前面的值。您正在多次使用'AND'。只需删除'AND'键,因为ANDing是默认行为。

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

https://stackoverflow.com/questions/30693955

复制
相关文章

相似问题

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