2016-09-27 71 views
3

我正在使用Doctrine 2作爲Slim 3的ORM,但當我嘗試實現雙向關係時,我一直陷在對象映射部分中屬性中的註釋「@OneToMany」從未導入(Doctrine2)

/** 
* Class Resource 
* @package App 
* @ORM\Entity 
* @ORM\Table(name="users", uniqueConstraints={@ORM\UniqueConstraint(name="user_id", columns={"user_id"})})) 
*/ 
class User 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="UserRoles", inversedBy="users") 
    * @ORM\JoinColumn(name="role_id", referencedColumnName="user_role_id") 
    */ 
    protected $user_role; 
} 

/** 
* Class Resource 
* @package App 
* @ORM\Entity 
* @ORM\Table(name="user_roles", uniqueConstraints={@ORM\UniqueConstraint(name="user_role_id", columns={"user_role_id"})})) 
*/ 
class UserRoles 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="User", mappedBy="user_role") 
    */ 
    protected $users; 

    public function __construct() 
    { 
     $this->users = new ArrayCollection(); 
    } 
}  

我得到一個異常,當我嘗試php vendor/bin/doctrine orm:schema-tool:update --force

輸出是:

[主義\ COMMON \註解\ AnnotationException] [語義錯誤]註釋 「@OneToMany」 我n屬性App \ Entity \ UserRoles :: $用戶從未導入。你可能忘記爲這個註釋添加一個「使用」語句嗎?

+0

我已刪除由於計算器的碼約束到文本比setter和getter和各個字段 –

+1

它是「@ORM \一對多」。有關詳細信息,請參閱您的'use'語句。 –

+0

@AlexBlex表示。你也缺少''ManyToOne''和''JoinColumn''的@ORM \'' –

回答

12

學說類等

Doctrine\ORM\Mapping命名空間的一部分。

您應該使用ORM導入該名稱空間作爲別名。然後,您應該在這些類的前面添加@ORM作爲註釋以使其工作。

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\ManyToOne(...) 
* @ORM\JoinColumn(...) 
*/ 

如果你只是想使用每一個這些類,你必須分別導入每個類。

use Doctrine\ORM\Mapping\ManyToOne; 
use Doctrine\ORM\Mapping\JoinColumn; 

/** 
* @ManyToOne(...) 
* @JoinColumn(...) 
*/ 
+0

那麼你的問題==解決方案? – danopz

+0

仍然沒有工作..得到相同的錯誤 –

+0

你有你的實體上使用聲明? – danopz