我如何在学说的多对一关系中解决重复的条目



在我们的一种产品中,我们目前正在遇到有关多对一关系的一些问题。情况如下:

  • 我们有一个"类似"的汇总,包含userId,一个" lieeType"实体和likeDentityId。
  • Liepype实体由ID和字符串值组成,目前可以扩展。
  • ,可以扩展。
  • LeakedentityID是指所喜欢的实体本身的ID(文章ID或媒体ID(

我们当前设置的问题是,当我们插入新喜欢时,每个类似的人都会获得与其他类型相同的字符串值,而我希望它们是相同的ID。

更多的视觉效果,这是当前表显示我们喜欢的表。它具有包含对类型的引用的类似_type_id。

带有喜欢的表

这是我们类型类型的表。如您所见,它生成了2种具有不同ID的不同Lifetypes,并将其链接到类似。

带有liketypes的表

我首选的情况是,每当我坚持一个新的类似的情况时,学说检查是否已经存在,如果是的,则将已经存在的LikeType ID链接到类似。因此只有1个"媒体" lieeType,并且两个都具有相同的含义。

这是我的类似ORM实体的XML配置:

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                          https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <entity name="MyNamespaceLikeDomainEntityLike" table="likes" repository-class="MyNamespaceLikeInfrastructureRepositoryLikeRepository">
        <id name="id" type="integer" column="id" length="191">
            <generator strategy="AUTO" />
        </id>
        <field name="userId" type="string" length="191" />
        <many-to-one field="likeType" target-entity="MyNameSpaceLikeDomainEntityLikeType" fetch="EAGER">
            <cascade>
                <cascade-persist/>
                <cascade-merge/>
            </cascade>
        </many-to-one>
        <field name="likedObjectId" type="string" length="191" />
    </entity>
</doctrine-mapping>

这是类型类型的XML配置:

<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                          https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
    <entity name="MyNameSpaceLikeDomainEntityLikeType" repository-class="MyNameSpaceLikeInfrastructureRepositoryLikeRepository">
        <id name="id" type="string" length="191">
            <generator strategy="AUTO" />
        </id>
        <field name="type" type="string" length="191" />
    </entity>
</doctrine-mapping>

也许我们犯了一个简单的错误,但是我找不到解决这个问题的解决方案,尽管我们通过检查数据库中的现有liketype看到了一些解决方法,然后在持续存在之前插入ID,但我们感到应该是ORM为我们做这件事的任务。因此,我想知道是否有一些配置错误来实现这一目标。

预先感谢。

-Danny Eerens

使like_type.type字段唯一,它将阻止重复值的插入:

<field name="type" type="string" length="191" unique="true" />

然后,当您要插入新的like时,可以检查该类型是否已经存在:

// This is the name of the like_type --------------------------------------------------------------------v-----------v
if (($LikeType = $entityManager->getRepository('MyNameSpaceLikeDomainEntityLikeType')->findOneByName($likeTypeName)) == null)
{
    // the Like type wasn't found, create a new one
    $LikeType = new LikeType();
    $LikeType->setType($likeTypeName);
    $entityManager->persist($LikeType);
}
// Whatever if the like type is a new one or not, it can now be set to the like
$Like->SetLikeType($LikeType);
$entityManager->persist($Like);

相关内容

  • 没有找到相关文章