我的目标是:
创建通用关联,其中第一个实体(例如,类别)可以多次用于其他对象(例如,帖子,文章)
例
帖子有类别,文章有类别,但文章和帖子是完全不同的实体. (两者不能同时连接)
映射示例:
岗位
/** @Entity */
class Post
{
// ...
/**
* @ManyToMany(targetEntity="Category")
* @JoinTable(name="post_categories",
* joinColumns={@JoinColumn(name="post_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id", unique=true)}
* )
*/
private $categories;
public function __construct()
{
$this->categories= new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
}
文章
/** @Entity */
class Article
{
// ...
/**
* @ManyToMany(targetEntity="Category")
* @JoinTable(name="article_categories",
* joinColumns={@JoinColumn(name="article_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="category_id", referencedColumnName="id", unique=true)}
* )
*/
private $categories;
public function __construct()
{
$this->categories= new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
}
类别
/** @Entity */
class Category
{
// ...
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
}
正如您所看到的,这是One-To-Many,单向连接表关联.
现在,我可以查询单个帖子类别和文章类别,但类别不了解帖子或文章.这很好,因为我可以重复使用Category.
哪里有问题?
我需要加载包含单个类别或类别的所有帖子或文章.
例
我们有20个帖子,其中的类别名为“symfony”(id:2),10个帖子的类别名为“doctrine”(id:3).现在我需要查询加载所有类别“doctrine”的帖子
findPostsByCategoryId( $id );
// findPostsByCategoryId( 3 );
或所有两个类别的帖子
findPostsByCategories( Array $array );
// findPostsByCategories( array(2,3) );
我怎样才能做到这一点?
我需要针对此案例或解决方案的解决方案来实现我的目标.
每个提示都很受欢迎.
附:我在这里描述的映射还有其他相关问题