【问题标题】:Retrieving related model's data CakePHP检索相关模型的数据 CakePHP
【发布时间】:2014-06-27 08:16:30
【问题描述】:

这里是有问题的数据库表:

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
|   4|        1| null    | 2014-04-02

我想做的是检索用户列表(基于公司的 id)和他们在一系列日期的相关事件。我试图做的是:

$users = $this->User->find('all',
        array(
            'conditions' => array(
                'company_id' => CakeSession::read("Auth.User.company_id")
            ),
            'contain' => array(
                'Event' => array(
                    'conditions' => array(
                        'Event.date >=' => $from,
                        'Event.date <=' => $to
                    )
                )
            )
        )
);

这样我得到了用户列表及其相关事件,但不考虑$from$to 日期,这意味着返回特定用户的所有事件。

关系如下:

事件:

var $belongsTo = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'user_id'
    ));

用户:

        var $hasMany = array(
    'Event' => array(
        'className' => 'Event',
        'foreignKey' => 'user_id',
        'dependent' => false,
    )
);

        var $belongsTo = array(
        'Company' => array(
        'className' => 'Company',
        'foreignKey' => 'company_id',
        'dependent' => false,
    ),
);

公司:

    var $hasMany = array(
    'User' => array(
        'className' => 'User',
        'foreignKey' => 'company_id',
        'dependent' => false
    ));

非常感谢任何帮助或指导。

以下是 cakePHP 执行的两个查询:

SELECT `User`.`id`, `User`.`company_id`, `User`.`name`, `User`.`surname`, `User`.`email`,  `User`.`phone`, `Company`.`id`, `Company`.`name`, `Company`.`address` FROM `database`.`users` AS `User` LEFT JOIN `database`.`companies` AS `Company` ON (`User`.`company_id` = `Company`.`id`) WHERE `company_id` = 54

SELECT `Event`.`id`, `Event`.`customer_id`, `Event`.`user_id`,`Event`.`details`, `Event`.`hours`, `Event`.`minutes`, `Event`.`xhours`, `Event`.`xminutes`, `Event`.`assignment`, `Event`.`start_time` FROM `database`.`events` AS `Event` WHERE `Event`.`user_id` IN (124, 125, 126, 141, 143, 144, 147, 156)

如您所见,事件字段条件中的日期未被考虑在内。如果有任何其他重要信息可以提供,请告诉我。

此外,我刚刚尝试仅检索 Event 模型的特定字段,但效果不佳。所以基本上模型只是按原样包含,没有应用其他参数。 或者可能根本不包含模型,我得到的结果只是因为 recursive 被设置为 1?

【问题讨论】:

  • 你能添加那个find的结果查询吗?检查是否是查询本身的问题或蛋糕是如何构造的。
  • 刚刚添加了结果查询。
  • 您显示的事件表(id | user_id | details | date)与我在查询中看到的表(id,customer_id,user_id,小时,分钟,xhours,xminutes,分配,开始时间)。这是一个错字还是有什么你没有告诉我们的(比如虚拟字段)?
  • 在这种情况下,这些只是用于保存不相关数据的普通字符串。我只是想让可视化尽可能简单易懂,这就是我跳过其中一些的原因。我可以向你保证,没有其他关系、虚拟字段等。

标签: cakephp cakephp-2.3


【解决方案1】:

我不认为错误只是一个建议

$users = $this->User->find('all',
        array(
            'contain' => array(
                'Event' => array(
                    'conditions' => array(
                       'and' => array(
                            array(
                                 'Event.date >=' => $from,
                                 'Event.date <=' => $to
                            ),
                       'company_id' => CakeSession::read("Auth.User.company_id")
                        )
                    )  
                )
             )
          )
    );

【讨论】:

  • 试过了,但仍然没有考虑日期。
  • 仍然返回所有事件,无论日期是什么。
【解决方案2】:

问题是有一个错字。我一直认为它必须是:

var $actAs = array('Containable');

但实际上必须是$actsAs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    相关资源
    最近更新 更多