如何在实际代码中处理引用的表ID

时间:2015-07-04 20:23:28

标签: php sql database api

我有项目来制定一个稳步增长的API。它是我的第一个PHP的东西,它将用于我工作的基于Angular的网页。

目前,我尝试放下数据结构的实体,并使用SlimPHP和Doctrine构建API。非常适合背景。

我的问题困扰着我的许多多对多关系,但我认为最好用一个例子来解释它。

我有一个用户表。它需要用户和东西的通常数据。这里没什么特别的。用户可以拥有角色。示例:基本用户,管理员,等等。这些"类型"布局在RoleType表中。他们有一个Id,一个"名称"和描述。我也在他们自己的桌子上有游戏。还有姓名,身份证和其他内容。

现在我想给用户一个特定于游戏的角色。为此我创造了一个"角色"表。这个是基于来自用户,游戏和角色类型的外键构建,仅使用相应的ID并作为关系表。

ERM of the example

所有这一切都很有效。我设置我的API以向用户提供其角色,我可以获得用户的所有角色等等。

现在出现了一些难题:我希望在每个游戏的后端为每个用户分配一个角色(基本用户)。为此,我扩展了创建方法,以迭代所有创建的用户创建游戏,并创建一个角色"每个游戏的角色表中的关系。但是:为了工作,我必须在我的roleTypes表中查询"基本用户"的ID。作用。

这是一个代码示例。特别是第一行很重要。它主要是Doctrince特定的语法,但在第一行我查询" baseUser"这是标准角色的确切拼写。

$type = $this->getEntityManager()->getRepository('App\Entity\RoleType')->findOneByTitle("baseUser");
    $games = $this->getEntityManager()->getRepository('App\Entity\Game')->findAll();

    foreach ($games as $game) {
        $role = new RoleEntity();
        $user->__get("roles")->add($role);
        $role->__set("user", $user);
        $role->__set("game", $game);
        $role->__set("type", $type);
        $this->getEntityManager()->persist($role);
    }
    return $user;

我的问题现在是:这是正确的方法吗?我在大学和其他场合学习过应该避免字符串匹配。如果除了我之外的任何人都会更改该代码或编写自己的代码(很可能),我必须确保他们知道每个"角色检查"该角色的正确拼写,并使拼写成为固定的东西。

另一种方法是记住该角色的ID并在每个场合检查该角色。让我解决问题"如果id在未来发生变化怎么办"。

在我看来,数据库的代码和实际内容不应该干扰并相互依赖,但我无法想到任何可以让我的代码分配特定角色或检查角色的方式而不给它字符串或其id。

我错了还是那个"对"如何做我试图实现的目标?

0 个答案:

没有答案
相关问题