我有3张桌子:
user:
id;name
usercompany:
id;user_id, company_id
company:
id;company_name
如何连接蛋糕中的所有3个表格? 我希望能够看到哪些公司与用户相关联。 用户可以属于多个公司。
在用户控制器中,我只想使用$ this-> User-> find(“all”),它应该显示所有连接公司的用户(包括公司名称)。
我怎样才能在蛋糕中做到这一点?我该怎么用,hasAndBelongsToMany?感谢您的见解。
答案 0 :(得分:2)
我猜你没看过手册,你需要知道的一切都在this page上。
这是一个HABTM,hasAndBelongsToMany关联。您的连接表也不遵循CakePHP约定,它应该被命名为companies_users。 See the page about conventions。如果您不遵循约定,则必须在任何地方声明您正在使用的表,模型和外键。如果它是遗留数据库并且您无法更改它们,那很好。但如果它是一个新的应用程序,你应该真正遵循框架约定,它将使事情更容易。
用户< - >公用用户< - >公司
class User extends AppModel {
public $hasAndBelongsToMany = array(
'Company' =>
array(
'className' => 'Company',
'joinTable' => 'companies_users',
'foreignKey' => 'user_id',
'associationForeignKey' => 'company_id',
'with' => 'CompaniesUser'
)
);
}
你必须在“另一面”定义关联,也就是公司模型。
为了能够在分页查询中为用户提取所有公司,您必须define the joins manually。有很多问题和答案可以解释如何执行此操作,here is an one,another one。
答案 1 :(得分:1)
按照以下步骤操作:
步骤1:创建3个名为User.php,UserCompany.php和Company.php的模型
第2步:在User.php内部
var $hasMany = array(
'UserCompany' => array(
'className' => 'UserCompany',
'foreignKey' => 'user_id'
)
);
第3步:在UserCompany.php内部
var $hasMany = array(
'Company' => array(
'className' => 'Company',
'foreignKey' => 'company_id'
)
);
第4步:从控制器 $这 - >用户 - >发现("所有&#34)