我有2個實體 - 用戶和標籤。不能得到教條2多對多的關係去工作
這是我的用戶:
<?php
namespace Project\Model;
/**
* @Entity
* @Table(name="users")
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"user" = "User", "client" = "Client", "staff" = "Staff"})
**/
class User implements \JsonSerializable {
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string", name="first_name") **/
protected $firstName;
/**
* @ManyToMany(targetEntity="Project\Model\Tag", inversedBy="users")
* @JoinTable(name="user_tags")
**/
protected $tags;
/**
* Construct a new user.
*/
public function __construct() {
$this->tags = new \Doctrine\Common\Collections\ArrayCollection();
}
// Getters
public function getId() {
return $this->id;
}
public function getFirstName() {
return $this->firstName;
}
public function getTags() {
return $this->tags;
}
// Setters
public function setFirstName($firstName) {
$this->firstName = $firstName;
}
/**
* Add a tag to a user.
* @param Tag
*/
public function addTag(Tag $tag) {
$tag->addUser($this);
$this->tags[] = $tag;
}
}
這是我的標籤:
<?php
namespace Project\Model;
/**
* @Entity
* @Table(name="tags")
**/
class Tag implements \JsonSerializable {
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string") **/
protected $tag;
/**
* @ManyToMany(targetEntity="Project\Model\User", mappedBy="tags")
*/
protected $users;
public function __construct() {
$this->users = new \Doctrine\Common\Collections\ArrayCollection();
}
// Getters
public function getId() {
return $this->id;
}
public function getTag() {
return $this->tag;
}
// Setters
public function setTag($tag) {
$this->tag = $tag;
}
public function addUser(User $user) {
$this->users[] = $user;
}
}
如果我創建一個新的標籤,新的用戶,標籤添加到用戶,然後調用getTag ()方法,它什麼都不返回 - 任何人都可以幫我解決我出錯的地方嗎?
$tag = new Tag();
$tag->setTag('Foo');
$entityManager->persist($tag);
$user = new User();
$user->addTag($tag);
$entityManager->persist($user);
$entityManger->flush();
var_dump($user->getTags());
我已更新我的問題以包含我的命名空間。另外我沒有使用Symfony。我應該在哪裏獲得mappedBy? – JeremyKirkham
要麼刪除你的「inverdedBy」映射,並且你的實體之間有一個單向關係,要麼向你的標記實體添加一個$ users屬性,註釋爲:@ManyToMany(targetEntity =「Project \ Model \ User」,inversedBy = 「tags」)' 然後它變成雙向的。 –
我與第二個選項,但它仍然沒有工作。另外根據教義文檔,標記實體註釋應該被映射,而不是反向。我試過了,但也沒有奏效。 – JeremyKirkham