Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.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_Doctrine Orm - Fatal编程技术网

Php 条令中同一列的两个不同类型的属性

Php 条令中同一列的两个不同类型的属性,php,doctrine-orm,Php,Doctrine Orm,我试图将两个属性绑定到教义中的同一列 我的目标是能够从整数值$entity->setSomeId(3)中填充和查找整数列,但也能够使用引用的对象$entity->setSome($some)(其中$some是一个对象) 我已尝试将我的实体定义为: /** * @var Some * * @ORM\OneToOne(targetEntity="Some") * @ORM\joinColumn(name="id", referencedColumnName="other_id") */ p

我试图将两个属性绑定到教义中的同一列

我的目标是能够从整数值
$entity->setSomeId(3)
中填充和查找整数列,但也能够使用引用的对象
$entity->setSome($some)
(其中$some是一个对象)

我已尝试将我的实体定义为:

/**
 * @var Some
 *
 * @ORM\OneToOne(targetEntity="Some")
 * @ORM\joinColumn(name="id", referencedColumnName="other_id")
 */
private $someId;

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer", length=11, precision=0, scale=0, nullable=false, unique=true)
 */
private $something;
它用于检索数据,但在我尝试创建实体时不起作用

我通过以下方式创建实体:

$entity = new Entity();
$entity->setSomeId(3)

$entity->getSomeId(); // = 3
$em->persist($entity);
$em->flush();
给我以下错误:

`Integrity constraint: Column id cannot be null`
我猜这是因为
$something
在某个地方覆盖了
$someId
的值


有可能用教义做我想做的事吗?或者我应该只使用引用的对象,而忘记将整数直接分配给该列吗?

您可能需要一对一的双向关系:

下面的代码片段来自位于以下位置的条令文档:


而不是通过指定“整数到$someId,描述您要创建的实体之间的整体OneToOne关系。我可以在这方面更好地帮助你们,因为我认为你们在试图规避教义,而它已经很好地处理了人际关系。此外,认识到条令将在几乎每个实体中处理您的密钥也是很重要的。我还没有发现有必要绕过这一点。你应该使用“引用”实体。请参阅答案。我将尝试一下。我看到你没有提到
*@var Cart$Cart
,而我提到了,这可能是Doctrine拒绝让我将Id设置为整数并强迫我给出一个对象的原因吗?Doctrine希望你使用相关实体,而不是设置“Id”。让条令为您处理键,因为它管理对象关系映射(因此您不必这样做)。例如,在一些多对多关系中,条令实际上会创建一个“连接”表,其中包含两个相关表的键。这只是条令如何帮助你更聪明地工作的一个例子。您刚刚熟悉了条令,它是更抽象的软件层。更新对象原则“给你”,然后
persist()
flush()
。“身份证”是为你处理的。找出我的问题所在。如果事实是正确的,我的原则中的关系原则是正确的,但我的问题是我在做一个
->find
来检索引用的实体,而不是
->getReference
,从查询的数量来看,这听起来很糟糕。我将继续使用实体关系和引用,这很好。谢谢
<?php
/** @Entity */
class Customer
{
    // ...

    /**
     * One Customer has One Cart.
     * @OneToOne(targetEntity="Cart", mappedBy="customer")
     */
    private $cart;

    public function getCart() {
        return $this->cart;
    }    
    // ...
}

/** @Entity */
class Cart
{
    // ...

    /**
     * One Cart has One Customer.
     * @OneToOne(targetEntity="Customer", inversedBy="cart")
     * @JoinColumn(name="customer_id", referencedColumnName="id")
     */
    private $customer;

    public function getCustomer() {
        return $this->customer;
    }

    // ...
}