Cakephp 表与自身之间的归属关系

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

我有一个数据库,其中包含一个表Users,我需要存储关于它们之间一种关系的信息:具有管理其他用户权限的用户。此外,这些被管理的用户也可以是经理,因此任何用户都可以是经理,也可以由包括他们自己在内的任何其他用户管理(2个用户可以是彼此的经理)

因此,我唯一想到的是创建一个包含以下字段的“联接”表:

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'
]);
另见


你好,ndm。首先,谢谢你。我想我已经理解了你的观点,所以最后我按照你的建议配置了关系。然而,每当我试图在数据库上强制转换查找时,就会出现错误:“SQLSTATE[42S02]:找不到基表或视图:1146表“test.users\u users”不存在”。我将编辑问题,因为我无法在注释中编写代码。希望您能在这方面帮助我。@Baalhug这是该表按照约定的名称,它将使用涉及的两个模型类的表名,而不是用于关联的别名。您可以遵守约定并重命名表,或通过
joinTable
选项配置表名,或为连接表定义与表名匹配的特定类名(如
ManagersUsers
)或使用
table()/setTable()
定义要使用的所需表名。使用选项:“通过”=>“管理者”\u用户”非常感谢