【问题标题】:Use statement for @OneToOne - Doctrine2使用 @OneToOne 的声明 - Doctrine2
【发布时间】:2012-08-08 07:23:41
【问题描述】:

我有一张包含 Products 的表格和另一张包含 Notes 的表格。每个产品可以有或没有一些注释。我只需要注释就知道它们被引用到哪个产品,但产品不知道它的注释。我认为这应该是我的代码:

namespace EM\MyBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

use EM\MyBundle\Entity\Productss;

/**
 * @ORM\Entity
 * @ORM\Table(name="notes")
 */
class Notess
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @OneToOne(targetEntity="Productss")
 * @JoinColumn(name="products_id", referencedColumnName="id")
 **/
private $products; 
//... 
}

namespace EM\MyBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity
 * @ORM\Table(name="domains")
 */
class Domains
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;
// ...
}

但它给出了一个错误:[Doctrine\Common\Annotations\AnnotationException]

[语义错误] 属性 EM\MyBundle\ 中的注释“@OneToOne” Entity\Notes::$products 从未导入。您是否可能忘记添加“使用 " 这个注解的声明?

你能帮我解决这个问题吗?

【问题讨论】:

    标签: php symfony doctrine-orm


    【解决方案1】:

    我认为您应该改用@ORM\OneToOne...

    /**
     * @ORM\OneToOne(targetEntity="Productss")
     * @ORM\JoinColumn(name="products_id", referencedColumnName="id")
     */
    private $products; 
    //... 
    }
    

    【讨论】:

    • 无论是什么类型的关系都会出现这个问题:oneToMany、oneToOne 或 manyToMany,因为文档的原因。我只复制/粘贴官方文档时遇到了同样的问题:docs.doctrine-project.org/en/latest/reference/…
    • 这是因为教义文档假设您将 useing 每个 @class 所以所有注释都使用实际的类名 (use Doctrine/ORM/Mapping/OneToOne => @OneToOne),其中 Symfony推荐 use Doctrine\ORM\Mapping AS ORM 命名空间方法,因此所有注释都使用 ORM 作为基础 (@ORM\OneToOne)。
    猜你喜欢
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多