【发布时间】:2018-08-06 07:18:48
【问题描述】:
我是 Symfony 的新手,这些问题是在最近的学习过程中提出的。
以商店为例,我将创建两个实体,Product 和 Category,它们具有双向多对一关系。
class Product
{
private $id;
private $name;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Category", inversedBy="products")
* @ORM\JoinColumn(name="category_id", referencedColumnName="id", nullable=false)
*/
private $category;
}
class Category
{
private $id;
private $name;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Product", mappedBy="category")
*/
private $products;
}
所以我的第一个问题是:
如果我想获取特定类别中的所有产品,URL应该是
/categories?categoryId=1&limit=20&orderBy=name (我知道这有点傻,但是 Category 记录应该包含所有 Product 信息吗?)
或
/products?categoryId=1&limit=20&orderBy=name
对于后一个问题,这里是第二个问题:
我将 ProductRepository 注入到 ProductController
class ProductController extends Controller
{
private $productRepository;
public function __construct(ProductRepository $productRepository)
{
$this->productRepository = $productRepository;
}
...
}
为了获取一个类别中的所有产品,我写了一个这样的方法:
public function findByCategory(Category $category): array
{
return $this->createQueryBuilder('p')
->andWhere('p.category = :category')
->setParameter('category', $category)
->orderBy('p.name', 'ASC')
->setMaxResults(20)
->getQuery()
->getResult()
;
}
那么,在 ProductController 中,我应该如何从 URL 中的查询字符串 'categoryId' 中获取 Category 对象?我应该也注入 CategoryRepository 还是应该简单地注入一个实体管理器对象?
【问题讨论】:
标签: symfony doctrine-orm