Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 条令-单向对双向_Php_Orm_Doctrine_Doctrine Orm_Relational Database - Fatal编程技术网

Php 条令-单向对双向

Php 条令-单向对双向,php,orm,doctrine,doctrine-orm,relational-database,Php,Orm,Doctrine,Doctrine Orm,Relational Database,我开始和ORM库一起玩,我正在学习表格之间的所有关联 所以我被单向和双向关系的差异所困扰 正如我所理解的,单向关系的主键只在一侧,而这一侧是拥有的一侧,对吗? 双向关系在两个表中都有主键,因此您可以从两侧拥有关系,并在两侧设置约束 现在,我正在阅读有关关系的条令文件,你有: 和协会 但它们生成相同的SQL,以及具有相同主键和约束的相同表。所以我看不出这两者有什么不同。这两个例子都有一个主键 正如我所理解的,真正的双向关系应该在两个表中都有主键指向另一个表,对吗?在理论文件中给出的例子并非如此。两

我开始和ORM库一起玩,我正在学习表格之间的所有关联

所以我被单向和双向关系的差异所困扰

正如我所理解的,单向关系的主键只在一侧,而这一侧是拥有的一侧,对吗? 双向关系在两个表中都有主键,因此您可以从两侧拥有关系,并在两侧设置约束

现在,我正在阅读有关关系的条令文件,你有: 和协会

但它们生成相同的SQL,以及具有相同主键和约束的相同表。所以我看不出这两者有什么不同。这两个例子都有一个主键

正如我所理解的,真正的双向关系应该在两个表中都有主键指向另一个表,对吗?在理论文件中给出的例子并非如此。两个例子给出了相同的结果,并且是相同的

所以我所做的是,假设我有用户和卡实体,并且希望关系是一对一双向的

    /**
 * @Entity
 * @Table(name="users")
 */

class User
{
    /**
     * @Id
     * @GeneratedValue
     * @Column(type="bigint")
     */
    protected $id;

    /**
     * @OneToOne(targetEntity="Card", mappedBy="User")
     * @JoinColumn(name="card_id", referencedColumnName="id")
     */
    protected $card;

    /**
     * @Column(name="user_name", type="string")
     */
    protected $userName;

    /**
     * @Column(name="user_pass", type="string")
     */
    protected $userPass;
}

    /**
 * @Entity
 * @Table(name="cards")
 */

class Card
{
    /**
     * @Id
     * @GeneratedValue
     * @Column(type="bigint")
     */
    protected $id;

    /**
     * @OneToOne(targetEntity="User", inversedBy="Card")
     * @JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user;

    /**
     * @Column(name="post_title", type="string")
     */
    protected $cardType;
}
这里的区别是我在两个对象/实体中都写了@JoinColumn。在这个例子中,只有一个。 现在我会得到我认为的双向关系。如果我看EER图,我可以看到一条线从用户指向卡,另一条线从卡指向用户

那么基本上我做对了吗? 条令文件错误吗D 双向一对一关系在EER图中是什么样子的


谢谢

单向和双向与如何在数据库层中创建这些连接的后台算法无关

他们谈论的只是如何使用连接。在单向关系中,只能从一个站点访问目标。双向关系允许从两侧调用连接

所以在裁研所。雷尔。模型a可以到达模型b,但是模型b不能到达模型a(没有额外的工作)。 如果您现在使用bidir。rel两个模型可以毫无问题地相互访问

在理论术语中,单向关系定义了
$modelA->getModelB()
方法,但不是
$modelB->getModelA()
方法,而双向关系定义了这两个方法(或访问器,不管您如何调用它们)

在uml图中,它将如下所示:

unidirectional
modelA --X------> modelB

bidirectional
modelA <--------> modelB
单向
modelA--X------>modelB
双向的
模型A模型B

唯一的区别在于PHP类接口,即存在或不存在指向所有者的属性(如所述示例中的
$customer
属性)。换句话说,条令只需要知道它应该关注单个属性(
$shipping
)还是两个属性(
$cart
$customer
)。没有其他区别。因此,SQL代码是相同的(因为一个外键就足以表示任何1:N关系),EER图中也没有区别(因为在EER中,通常不会解决与PHP相关的实现细节)