数据库索引cakePHP

时间:2014-03-26 13:53:54

标签: mysql cakephp cakephp-2.0

我有两张桌子,即'客户'和'事件'。这两者之间的关系如下:

事件

var $belongsTo = array(
         ...
    'Customer'=>array(
        'className' => 'Customer',
        'foreignKey' => 'customer_id'
    )
    );

客户

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

每个客户记录都包含公司ID以及当前登录的用户。我想要实现的是获取一天中的所有事件,仅与特定公司相关,但由于事件表不包含公司ID,因此当然无效。也许以下查找电话将有助于更好地理解问题:

$conditions = array('company_id'=>CakeSession::read("Auth.User.company_id"), 'date'=>date("Y-m-d", $tomorrow));
$tomorrowsEvents = $this->find('all', array(
                                'conditions'=>$conditions, 'contain'=>array('User', 'Customer')));

此外,客户属于公司,公司有很多客户,如下所示:

客户

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

公司

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

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

我实际上会做这个查询"向后"通过从Customer执行,并使用可包含的行为来包含相关的事件:

$this->Customer->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)
                    )
             )
        )
  ));

答案 1 :(得分:0)

在您的情况下,事件似乎有许多公司和公司有很多事件。这是hasAndBelongsToMany关系的理想情况。但是,您必须专注于className和joinTable属性来处理连接表客户的不方便命名。

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

答案 2 :(得分:0)

您需要重新考虑问题,因为用户可以是(客户或公司),然后他们有一个组或他们属于某种类型的用户。然后用户属于组或用户类型,该组可以是客户或公司。

用户属于一个群组 组有很多用户

用户有很多活动 事件有很多用户

您可以判断客户或公司是否属于拥有

的群组类型

table_ _ _group

id _ ___ 类别 __ _ _ 子类别

1 _ ___ 客户 __ _ _ 示例

2 _ ___ 公司 __ _ _ 示例