条令-数据库表示

uelo1irk  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(332)

我尝试了几乎所有的方法来创建表示我的数据库模式的实体,但仍然有整页错误。如果有人能给我一些光,我将不胜感激。
基本上我们有两个登记表,一个是品牌登记表,一个是影响者登记表。在每个表单中,我们要求用户信息加上具体的信息,这取决于您是哪个表单页面。
数据库架构:
角色(此表中已填充了管理员、品牌或影响者的“类型”)
id |名称
用户(此表包含个人的一般信息,将使用电子邮件和密码登录)
id | id |角色fk |姓名|电话|电子邮件|密码|已创建|状态
品牌(此表包含使用品牌表进行注册的品牌的具体信息)
id |用户id fk |姓名|品牌|职位|身份证|电子邮件|品牌|如果|品牌|名称|公司|电话|品牌|
职位(此表中已经填充了我们显示要选择的职位,例如ceo)
id |名称
地区(此表已填充了我们显示要选择的地区,例如,nj)
id |名称
影响者(此表包含使用品牌表进行注册的影响者的特定信息)
id |用户id fk |姓氏|出生日期|电子邮件|品牌|地区id fk |性别
要点:
我已经尝试使用条令注解,但仍然没有为我工作,不确定这是因为我是新来的,或者如果我没有正确地构建数据库/实体,甚至没有管理一个实体及其与数据库的关联。
这个想法是一个用户/人可以是一个品牌或影响者。这是由链接到role表的role\u id实现的。e、 g,如果我在brand表单中并尝试添加我的信息,它将在users表中添加个人信息,并使用role_id 2链接到role表。然后使用用户主键链接两个表,将给定的特定品牌信息插入表brand中(不确定这里是否有错误,也许用户应该遍历role表并从该表转到特定的表,这不是我现在要做的)。在brand表中,我请求它的信息,并从position select中获取fk position\u id并将其链接到表位置。
一个不同但相似的事情发生在影响者身上,它将选择他的地区,然后我使用这个地区id链接地区表。
问题始终是我需要在实体中定义的与学说和财产的外键关联。我已经没有声明外键了,因为我知道条令在内部使用对象处理fk关系,但无法使其工作。。
我非常感谢你们能给我的帮助。谢谢您。

vlju58qv

vlju58qv1#

我认为你是在试图通过继承来手动实现教义所能提供的功能。
一个小的设置,应该与你的描述,你要做的工作。
通用用户设置

/**
 * @ORM\Table(name="users")
 * @ORM\Entity
 *
 * @ORM\MappedSuperclass

 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 */
class User 
{
    /**
     * @var int
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @var string
     * @ORM\Column(name="name", type="string", length=255, nullable=false, unique=true)
     */
    protected $name;

    /**
     * @var Position
     * @ORM\OneToOne(...)
     */
    protected $position; // TODO

    // getters/setters & other properties
}

品牌使用者

/**
 * @ORM\Table(name="brands")
 * @ORM\Entity
 */
class BrandUser extends User
{
    /**
     * @var string
     * @ORM\Column(name="specific_brand_property", type="string", length=255, nullable=false, unique=false)
     */
    protected $specificBrandProperty;

    // getters/setters & other properties
}

这个小设置应该已经为您提供了2个实体对象: User 以及 BrandUser ,后者先扩张。
的主键 BrandUser 将是的外键 User 设计和要求 User 也是对 BrandUser .
如果您使用的是fieldset和inputfilter类,那么 BrandUserFieldset 展开 Fieldset 供您在表格中使用(以下为示例,更多信息请参阅我的一份回购协议)

class UserFieldset
{
    public function init()
    {
        parent::init();

        $this->add([
            'name' => 'id',
            'required' => true,
            'type' => Hidden::class,
        ]);

        $this->add([
            'name' => 'name',
            'required' => true,
            'type' => Text::class,
            'options' => [
                'label' => 'Name',
            ],
        ]);

        $this->add([
            'name' => 'position',
            'required' => true,
            'type' => ObjectSelect::class,
            // other properties
        ]);
    }
}

延长 BrandUser ```
class BrandUserFieldset extends UserFieldset
{
public function init()
{
parent::init(); // <-- adds id, name, position

    $this->add([
        'name' => 'specificBrandProperty',
        'required' => true,
        'type' => Text::class,
        'options' => [
            'label' => 'Name',
        ],
    ]);
}

}

我想添加一些命令,它们可能会帮助您。我的设置要求我在命令前面加上前缀 `./vendor/bin/doctrine-module` ,将安装所需的内容添加到以下内容: `orm:validate-schema` -将检查您的条令注解是否有错误。还将返回它发现的任何错误(语法和逻辑) `orm:schema-tool:update` -命令创建/更新数据库架构
旗帜 `-f` -将使 `:update` 真正执行
旗帜 `--dump-sql` 将使 `:update` 不是执行,而是将sql转储到终端中
旗帜 `-f` 以及 `--dump-sql` 可以合并 `orm:mapping:describe “\Full\Namespace\To\Entity”` -显示了关于特定实体的所有信息,包括关系、关系Map、鉴别器、扩展(子实体)和父实体等
另外,看看我前段时间遇到的类似问题的解决方案。

相关问题