Gri*_*iva 6 php mysql doctrine-query symfony doctrine-orm
创建通用关联,其中第一个实体(例如,类别)可以多次用于其他对象(例如,帖子,文章)
例
帖子有类别,文章有类别,但文章和帖子是完全不同的实体.(两者不能同时连接)
岗位
<?php
/** @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();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
文章
<?php
/** @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();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
类别
<?php
/** @Entity */
class Category
{
// ...
/**
* @ORM\Column(type="string", length=100)
*/
protected $name;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这是One-To-Many,单向连接表关联.现在,我可以查询单个Post类别和Article类别,但类别不了解帖子或文章.这很好,因为我可以Category反复使用.
我需要加载ALL Posts或Articles包含单个Category或Categories.
例
我们有20个名为"symfony" (id:2)的分类和10个名为"doctrine" (id:3)的分类.现在我需要查询加载所有类别的帖子"doctrine"
findPostsByCategoryId( $id );
// findPostsByCategoryId( 3 );
Run Code Online (Sandbox Code Playgroud)
或所有两个类别的帖子
findPostsByCategories( Array $array );
// findPostsByCategories( array(2,3) );
Run Code Online (Sandbox Code Playgroud)
我需要针对此案例或解决方案的解决方案来实现我的目标.每个提示都很受欢迎.
PS我在这里描述的映射还有其他相关问题
除非我误读你的问题,否则这看起来很简单:
获取具有特定类别的所有帖子:
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('p')
->from('SomeBundle:Post', 'p')
->join('p.categories', 'c')
->where('c.id = :categoryId')
->setParameter('categoryId', $categoryId)
->getQuery()
->getResult();
Run Code Online (Sandbox Code Playgroud)
获取包含各种类别的所有帖子:
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('p')
->from('SomeBundle:Post', 'p')
->join('p.categories', 'c')
->where($qb->expr()->in('c.id', ':categoryIds'))
->setParameter('categoryIds', $categoryIds) // array of ids
->getQuery()
->getResult();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4213 次 |
| 最近记录: |