我正在使用cakephp 2.3.0。我在手册中搜索了很长一段时间,我也搜索了google / stackoverflow。
我对cakephp还有些新鲜感。我一直在努力让$ hasAndBelongsToMany(多对多)工作,我确实让它工作......哇哇。但是,使用相同的模型,我无法在下面的工作中获得以下方案。
我有活动和用户模型。活动可以包含许多用户。用户可以进行许多活动。但是,我想在我的网页上显示活动列表以及活动的所有者,所有这些都在表格的一行中。
活动表包括以下列,其中包括:
用户表包括以下列,其中包括:
我的SQL看起来像:
select usr.username, actv.name
from users usr, activities actv
where usr.users_id = actv.owner_fk
活动模型(用户模型有类似的代码):
class Activity extends AppModel {
var $name = 'Activity';
public $hasAndBelongsToMany = array(
'User' =>
array(
'className' => 'User',
'joinTable' => 'activities_users',
'foreignKey' => 'activities_id',
'associationForeignKey' => 'users_id',
'unique' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'finderQuery' => '',
'deleteQuery' => '',
'insertQuery' => ''
)
);
我不确定CakePHP是否允许在同一模型中混合/匹配,例如......在同一模型中拥有$ hasOne并且还具有$ hasAndBelongsToMany。可能有一种简单的方法来实现我想要做的事情和/或最佳实践。我已经尝试了一些,但到目前为止没有运气。
我想在我的控制器中执行下面的代码,但是在上面的SQL中使用where where子句这样的条件。
$this->set('results', $this->Activity->find('all'));
答案 0 :(得分:0)
用户模型方向会更容易。真的,你要求Cake为你提供所有的用户细节和信息。该用户是所有者的活动详细信息。
所以你会有更多的东西:
$this->set('primary_user_with_activity', $this->Activity->User->find('all'));
根据Cake约定,owner_fk字段应为user_id - 并且应该使用belongs_to关系设置Activity模型以定义所有者。
然后将用户模型设置为具有has_one关系以匹配活动模型中的belongs_to
如果您想添加has_and_belongs_to_many关系,可以这样做 - 给它一个与belongs_to关系不同的别名。
public $hasAndBelongsToMany = array(
'People' => array(
'className' => 'User',
)
);
此处有更多详情: http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html
确实需要一些人习惯,但遵循惯例确实有帮助。