实体:
模型与关键字有很多关系,类别与关键字有很多关系。
orm生成以下表格
当给出类别时,我如何获得与此类别相关的所有模型?我会这样做
由于symfony2处理实体而不是表,因此创建mysql查询似乎很难。我试过像
这样的东西SELECT x,y FROM MyBundle:Category x, MyBundle:Model y
JOIN x.keywords
JOIN y.keywords
WHERE
x.id = " . $category . "
然而这是无效的mysql语法。有关如何在这里获得模型的任何想法吗?
答案 0 :(得分:1)
您可以尝试以下方法:
SELECT
y
FROM
MyBundle:Model y
WHERE
EXISTS (
SELECT
x
FROM
MyBundle:Category x
JOIN
x.keywords xk
WHERE
xk MEMBER OF y.keywords AND
x = :category
)
或者如果您的关系是bidirectional:
SELECT
y
FROM
MyBundle:Model y
JOIN
y.keywords yk
JOIN
yk.categories c
WHERE
c = :category
答案 1 :(得分:1)
从给定的类别(我想你有id)
$category_repo = $this->getDoctrine()->getManager()->getRepository('YourBundleName:Category');
$category = $category_repo->findOneById($id); //$id is your entity id
$keywords = $category->getKeywords(); //getKeywords() is the name of the method that you should have inside your class
$models = new ArrayCollection(); //or use a simple array
foreach($keywords as $keyword) {
foreach($keyword->getModels() as $model) {
$models->add($model);
}
}
但是直接使用sql应该更好,因为你将为每个对象执行单个查询而不是查询(延迟加载概念)