Cakephp 表与自身之间的归属关系
我有一个数据库,其中包含一个表Users,我需要存储关于它们之间一种关系的信息:具有管理其他用户权限的用户。此外,这些被管理的用户也可以是经理,因此任何用户都可以是经理,也可以由包括他们自己在内的任何其他用户管理(2个用户可以是彼此的经理) 因此,我唯一想到的是创建一个包含以下字段的“联接”表:Cakephp 表与自身之间的归属关系,cakephp,database-design,many-to-many,cakephp-3.x,Cakephp,Database Design,Many To Many,Cakephp 3.x,我有一个数据库,其中包含一个表Users,我需要存储关于它们之间一种关系的信息:具有管理其他用户权限的用户。此外,这些被管理的用户也可以是经理,因此任何用户都可以是经理,也可以由包括他们自己在内的任何其他用户管理(2个用户可以是彼此的经理) 因此,我唯一想到的是创建一个包含以下字段的“联接”表: manager_id (key field that links to a user_id) managed_id (key field too that links to a user_id as w
manager_id (key field that links to a user_id)
managed_id (key field too that links to a user_id as well)
但是一个连接表在同一个表之间,会产生什么样的关系呢
用户->归属(“用户”)
这样行吗
(在ndm回答后编辑) 使用ndm告诉我的方法,我得到了一个错误 因此,在UsersTable.php中,我现在有:
$this->belongsToMany('Managers', [
'className' => 'Users',
'foreignKey' => 'manager_id',
'targetForeignKey' => 'user_id'
]);
在数据库“test.sql”表中,用户有两个字段:
manager_id
user_id
两个关键领域
但当我尝试从UsersController.php进行查询时:
$query = $this->Users->find()
->contain(['Managers'])
->all()
;
我得到错误:SQLSTATE[42S02]:找不到基表或视图:1146表“test.users\u users”不存在
有什么帮助吗?一个连接表通常包含一个
belongstomy
关联,它基本上是hasMany
和belongsTo
在引擎盖下的组合,也可以手动表示,也可以使用hasOne
和belongsTo
来表示,这实际上取决于应用程序的需要,因此您可能应该首先评估应用程序在什么情况下需要如何查询数据,然后再从那里开始
一般来说,自我关联是可以的(参见烹饪书关联一章中的介绍),因此,是的,在pricipal中这是可以的,但是为了使其正常工作,您需要设置/配置一些不同的东西,也就是说,您需要使用一个唯一的别名,例如,Managers
而不是Users
,然后您的外键字段需要根据约定进行调整,即user\u id
(托管用户)和manager\u id
(管理用户),或者您必须在关联配置中相应地配置它们:
$this->belongsToMany('Managers', [
'className' => 'Users',
//'foreignKey' => 'managed_id',
//'targetForeignKey' => 'manager_id'
]);
另见
joinTable
选项配置表名,或为连接表定义与表名匹配的特定类名(如ManagersUsers
)或使用table()/setTable()
定义要使用的所需表名。使用选项:“通过”=>“管理者”\u用户”非常感谢