【问题标题】:Models association help in CakePHPCakePHP 中的模型关联帮助
【发布时间】:2014-05-08 09:27:11
【问题描述】:

我目前正在使用 CakePHP 开发一个项目,用户可以在其中创建项目。每个项目只有一个管理员用户,但其他用户应该能够“查看”该项目。我应该如何为用户创建这个“视图”选项? 我已经完成了以下模型关联: [Users Model] hasMany [Projects](到时候每个用户可以有很多项目)。

我现在有点困惑,我不知道我应该创建什么额外的模型关联:/ 我认为是 belongsTo 或 HasAndBelongsToMany,但我不确定:/ 你能帮我吗?

提前致谢!

【问题讨论】:

  • 您可以在Users中添加新字段is_admin来区分管理员用户和普通用户
  • 任何用户都可以查看任何项目,还是有其他逻辑限制用户可以查看哪些项目?
  • 这样,任何用户都可以查看任何项目(只是管理员和普通用户有区别)。我需要的是每个项目都可以从它的管理员和它的成员(而不是平台中的任何其他用户)中查看。 {到目前为止,只有管理员可以查看自己的项目,当然不能查看其他管理员的项目}
  • 您的数据模型缺少一个部分 - 关于有成员的项目的部分。一个用户可以是多个项目的成员吗?

标签: cakephp model model-associations


【解决方案1】:

你需要有3个数据库表

  1. 用户
  2. projects - 此表需要有一列(管理员),其中包含代表管理员用户的 user_id
  3. usersprojects - 此表是代表项目成员的用户和项目之间的交叉引用表

CakePHP 模型

用户

public $useTable = 'users';
public $hasMany = array(
    'ProjectAsAdmin' => array(
       'className' => 'Project')
  );
public $hasAndBelongsToMany = array(
    'ProjectAsMember' => array(
       'className' => 'Project')
  );

项目

public $useTable = 'projects';
public $hasAndBelongsToMany = array(
    'Member' => array(
       'className' => 'User')
 );
public $belongsTo = array(
    'Administrator' => array(
       'className' => 'User',
       'foreignKey' => 'administrator'
     )
  );

【讨论】:

  • 我现在正在实施,等待反馈,感谢您非常准确的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多