无法获得教义2多一到多的关系

  • 本文关键字:关系 doctrine-orm
  • 更新时间 :
  • 英文 :


我有2个实体 - 一个用户和一个标签。

这是我的用户:

<?php
namespace ProjectModel;
/**
 * @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="ProjectModelTag", inversedBy="users")
   * @JoinTable(name="user_tags")
   **/
  protected $tags;
  /**
   * Construct a new user.
   */
  public function __construct() {
    $this->tags = new DoctrineCommonCollectionsArrayCollection();
  }
  // 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 ProjectModel;
/**
 * @Entity
 * @Table(name="tags")
 **/
class Tag implements JsonSerializable {
  /** @Id @Column(type="integer") @GeneratedValue **/
  protected $id;
  /** @Column(type="string") **/
  protected $tag;
  /** 
   *  @ManyToMany(targetEntity="ProjectModelUser", mappedBy="tags")
   */
  protected $users;
  public function __construct() {
     $this->users = new DoctrineCommonCollectionsArrayCollection();
  }
  // 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());

我认为问题可能来自您的Manytomany关系。您使用

@ManyToMany(targetEntity="Tag", inversedBy="users")

虽然您应该有类似的东西(假设您正在使用Symfony 2):

@ManyToMany(targetEntity="AppBundleEntityTag")

另外,您使用inversedBy,但没有mappedBy,因此您的映射无效。

最后一个是一个细节,但是在标签类中命名属性"标签"不是最干净的。也许将其更改为"名称"。

在标签类中,您使用以下方式参考用户类:

/** 
 *  @ManyToMany(targetEntity="BixModelUser", mappedBy="tags")
 */

" bix"是"项目"吗?除非这是您的问题中的错别字,否则请引起问题。

一侧应"拥有"协会,并在添加时负责设置反向关联。

<?php
// Assuming that the User is the "owning side".
class User {
    // Mappings as you have them, minus the "Bix" namespace thing.
    public function getTags()
    {
        return $this->tags;
    }
    public function addTag(Tag $tag)
    {
        $tag->addUser($this);
        $this->tags->add($tag);
    }
    public function removeTag(Tag $tag)
    {
        $tag->removeUser($this);
        $this->tags->removeElement($tag);
    }
}
class Tag {
    // Mappings as you have them, minus the "Bix" namespace thing.
    public function getUsers()
    {
        return $this->users;
    }
    public function addUser(User $user)
    {
        $this->users->add($user);
    }
    public function removeUser(User $user)
    {
        $this->users->removeElement($user);
    }
}

相关内容

  • 没有找到相关文章

最新更新