我有两张桌子,分别是“客户”和“事件”。两者之间的关系如下:
事件
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
)
);任何帮助都是非常感谢的。
发布于 2014-03-26 16:42:36
实际上,我将通过从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)
)
)
)
));发布于 2014-03-26 14:40:34
在你的例子中,事件似乎有很多公司,公司有很多事件。这是hasAndBelongsToMany关系的理想状态。但是,您必须关注className和joinTable属性,以处理join表客户的不方便命名。
http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#hasandbelongstomany-habtm
发布于 2014-03-26 15:11:13
您需要重新考虑这个问题,因为用户可以是(客户或公司),然后他们有一个组,或者他们是一个类型的用户。然后,用户属于组或用户类型,此组可以是客户端或公司。
属于一个组的用户有许多用户
用户有许多事件,有很多用户。
您可以判断客户或公司是否属于拥有
table_____group
id ____类别____子类别
1 ____客户____示例
2 ____公司____示例
https://stackoverflow.com/questions/22663143
复制相似问题