php - 访问cake php中的复合表数据

标签 php mysql cakephp composite-primary-key

编辑:我的问题可能过于复杂,让我们简化一下。如何从不同的 Controller 和表导入/调用表。例如。我如何从 ProjectsController 调用 UsersTable?

如果我想访问和处理使用组合键将两个不同表连接在一起的表的数据,我应该如何执行此操作?

作为示例,我有项目和用户以及一个名为 ProjectsUsers 的表,该表跟踪两者的关系(哪些用户已分配给哪个项目以及他们在该项目中的角色)。使用复合键,我可以轻松地烘焙脚手架代码以进行添加和编辑,让我在创建项目时将用户分配给项目,但这并不能让我访问表中的角色变量。

我认为我应该为 ProjectsUsers 制作一个模型(我使用烘焙来做),然后在 ProjectsUsersTable 中制作函数来检查给定用户是否有权访问他们试图访问的任何内容。

ProjectsTable 方法 isOwnedBy(如下)工作正常,因此我尝试为我的复合表复制它,但没有成功。

项目 Controller :

use App\Controller\AppController;
use App\Model\Table\ProjectsUsers;

class ProjectsController extends AppController
{

    //Individual access rules to projects functions (projects/*).
    public function isAuthorized($user)
    {
        // All registered users can add projects.
        if ($this->request->action === 'add'){
            return true;
        }

        // Check from the ProjectsUsers table if the person trying to access
        // is a moderator of that project.
        if ($this->request->action === 'edit'){
            $projectId = (int)$this->request->params['pass'][0];
            if ($this->ProjectsUsers->isModeratedBy($projectId, $user['id']))
{                return true;
            }
        }

        // The owner of an article can edit and delete it.
        if (in_array($this->request->action, ['edit', 'delete'])){
            $projectId = (int)$this->request->params['pass'][0];
            if ($this->Projects->isOwnedBy($projectId, $user['id'])){
                return true;
            }
        }

        return parent::isAuthorized($user);
    }

}

项目表(工作正常):

class ProjectsTable extends Table
{

    public function isOwnedBy($projectId, $userId)
    {
        return $this->exists(['id' => $projectId, 'user_id' => $userId]);
    }

}

项目用户表:

class ProjectsUsersTable extends Table
{


    public function isModeratedBy($projectId, $userId)
    {
        return true;
    }

}

但是我收到错误:

Call to a member function isModeratedBy() on boolean

编辑:我的问题可能过于复杂,让我们简化一下。如何从不同的 Controller 和表导入/调用表。例如。我如何从 ProjectsController 调用 UsersTable?

最佳答案

我以为我已经尝试过这个,所以我困惑了一段时间,但正确的方法是:

use Cake\ORM\TableRegistry;

$articles = TableRegistry::get('Articles');

关于php - 访问cake php中的复合表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35251887/

相关文章:

php - 使用 PDO 连接到远程 MYSQL 服务器会导致相同的错误 SQLSTATE[HY000] [2002]

php - Symfony:与内连接查询相反

php - Wampserver cakephp 1.3严格标准错误

mysql - 登录CakePHP后,每个用户帐户使用不同的数据库

php - 将 Javascript 数组制作成 JSON

php - Google Analytics API PHP - 获取前 5 个页面

mysql - 如何使用 MySQL 配置 MvcMusicStore .Net WebApp?

php - CakePHP 在保存到数据库之前更改数据

php - Mysql - 删除空列以仅更新设置值

php - 在 DQL 上通过 Symfony 使用子查询进行查询