以下是有问题的数据库表:
Companies:
____________________
| id | name |
____________________
| 1| Unimex|
| 2| Solomex|
Users:
________________________
| id | name | company_id
_________________________
| 1| John | 1
| 2| Ricky| 2
Events:
_____________________________________
| id | user_id | details | date|
_____________________________________
| 1| 1| null | 2014-04-01
| 2| 1| null | 2014-04-15
| 3| 2| null | 2013-04-01
我想要做的是根据公司的ID检索特定日期的事件。我试图做的是以下几点:
$this->User->find('all',
array(
'conditions' => array(
'company_id' => CakeSession::read("Auth.User.company_id")
),
'contain' => array(
'Event' => array(
'conditions' => array(
'Event.date' => date("Y-m-d", $tomorrow)
)
)
)
));
但是这会检索公司的所有事件,但未应用日期条件。 在最好的情况下,我想只检索特定日期的一家公司的事件。否则,我会返回一个与一家公司相关的用户列表及其特定日期的事件。
最有效的方法是什么?
非常感谢任何帮助或指导。
以下是表格之间的关系:
Events:
var $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id'
));
Users:
var $belongsTo = array(
'Company' => array(
'className' => 'Company',
'foreignKey' => 'company_id',
'dependent' => false,
),
);
以下是我得到的查询:
选择Event
。id
,Event
。customer_id
,Event
。user_id
,Event
。{{1} },project_id
。Event
,service_id
。Event
,date
。Event
,start_city
。Event
, material
。Service
,id
。Service
,company_id
。Service
,name
。Service
,{{ 1}}。service_nr
,User
。id
,User
。company_id
,User
。employee_nr
,{{1} }。User
,name
。User
,surname
。User
,email
。User
,password
。 User
,role
。Customer
,id
。Customer
,company_id
。Project
,name
。{{ 1}},Project
。description
,Project
。link_nr
,Project
。start_date
FROM Project
。{{1} } finish_date
LEFT JOIN Project
。project_nr
AS schedule
ON(events
。Event
= schedule
。{{1} })LEFT JOIN services
。Service
AS Event
ON(service_id
。Service
= id
。schedule
)LEFT JOIN { {1}}。users
AS User
ON(Event
。user_id
= User
。id
)LEFT JOIN schedule
。 customers
AS Customer
ON(Event
。customer_id
= Customer
。id
)WHERE 1 = 1
现在的问题是公司ID没有被纳入审核状态,无论日期是什么,所有事件都将被退回。
答案 0 :(得分:2)
我尝试过这个解决方案,它对我有用。
根据公司,活动和用户等蛋糕惯例,我用小写字母制作了所有桌子。
这是事件模型
class Event extends AppModel {
var $actsAs = array('Containable');
public $belongsTo = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'user_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
}
这是控制器事件类
$tomorrow = '2013-04-01';
$this->Event->find('all',
array(
'conditions' => array(
'date' => date("Y-m-d", strtotime($tomorrow)),
),
'contain' => array(
'User' => array(
'conditions' => array(
'User.company_id' => CakeSession::read ('Auth.User.company_id')
)
)
)
));
这会给你
SELECT `Event`.`id`, `Event`.`user_id`, `Event`.`details`, `Event`.`date`, `User`.`id`, `User`.`name`, `User`.`company_id`
FROM `schedule`.`events` AS `Event`
LEFT JOIN `schedule`.`users` AS `User` ON (`Event`.`user_id` = `User`.`id` AND `User`.`company_id` = 2)
WHERE `date` = '2013-04-01'
我希望这对你有用。感谢
答案 1 :(得分:1)
试试这段代码:
$this->Event->find('all',
array(
'conditions' => array(
'User.company_id' => CakeSession::read("Auth.User.company_id"),
'Event.date' => date("Y-m-d", $tomorrow)
),
'contain' => array('User')
));