【发布时间】:2016-01-14 10:33:37
【问题描述】:
设置
我有三个实体:
- 词表
- WordInWordlist
- 定义
WordList 与 WordInList 具有 OneToMany 关系。 WordInList 与 Definition 具有 OneToMany 关系
我正在尝试什么
我正在尝试查询 word_id = 的所有定义行?和 wordlist_id = ?.
在标准 SQL 中,我会写以下内容:
SELECT * FROM definition WHERE word_wordlist_word_id = ? AND word_wordlist_wordlist_id = ?;
代码片段
WordInWordlist实体的适用部分为吹:
class WordInWordlist
{
/**
*
* @ORM\OneToMany(targetEntity="Definition", mappedBy="wordInWordlist")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="word_id", referencedColumnName="word_wordlist_word_id"),
* @ORM\JoinColumn(name="wordlist_id", referencedColumnName="word_wordlist_wordlist_id")
* })
* @Expose()
**/
protected $definitions;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Wordlist", inversedBy="wordInWordlist")
* @ORM\JoinColumn(name="wordlist_id", referencedColumnName="id")
**/
protected $wordlist;
定义实体的适用部分如下:
class Definition
{
/**
* @ORM\ManyToOne(targetEntity="WordInWordlist", inversedBy="definitions")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="word_wordlist_word_id", referencedColumnName="word_id"),
* @ORM\JoinColumn(name="word_wordlist_wordlist_id", referencedColumnName="wordlist_id")
* })
**/
protected $wordInWordlist;
我的尝试
1
public function getDefinitions($wordlist_id, $word_id)
{
$query = $this->createQueryBuilder('d')
->where('d.word_wordlist_word_id = :word_id')
->andWhere('d.word_wordlist_wordlist_id = :wordlist_id')
->setParameter('word_wordlist_word_id', $word_id)
->setParameter('word_wordlist_wordlist_id', $wordlist_id)
->getQuery();
return $query->getResult();
}
结果:
PHP Fatal error: Uncaught Doctrine\ORM\Query\QueryException: SELECT d FROM Spellingbee\Business\Entity\Definition d WHERE d.word_wordlist_word_id = :word_id AND d.word_wordlist_wordlist_id = :wordlist_id in /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:41 Stack trace:
#0 /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(483): Doctrine\ORM\Query\QueryException::dqlError('SELECT d FROM S...')
#1 /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(758): Doctrine\ORM\Query\Parser->semanticalError('line 0, col 63 ...', Array)
#2 /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(279): Doctrine\ORM\Query\Parser->processDeferredPathExpressions(Object(Doctrine\ORM\Query\AST\SelectStatement))
#3 /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php(351): Doctrine\ORM\Query\Parser->getAST()
#4 /home/dporter/projects/lis in /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php on line 63
2
public function getDefinitions($wordlist_id, $word_id)
{
$query = $this->createQueryBuilder('d')
->where('d.wordInWordlist = :wordlist_id')
->setParameter('wordlist_id', array(
'word' => $word_id,
'wordlist' => $wordlist_id
)
)
->getQuery();
return $query->getResult();
}
结果:
Fatal error: Uncaught Doctrine\ORM\Query\QueryException: A single-valued association path expression to an entity with a composite primary key is not supported. Explicitly name the components of the composite primary key in the query. in /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php:235 Stack trace:
#0 /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/SqlWalker.php(676): Doctrine\ORM\Query\QueryException::associationPathCompositeKeyNotSupported()
#1 /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/AST/PathExpression.php(79): Doctrine\ORM\Query\SqlWalker->walkPathExpression(Object(Doctrine\ORM\Query\AST\PathExpression))
#2 /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/SqlWalker.php(2295): Doctrine\ORM\Query\AST\PathExpression->dispatch(Object(Doctrine\ORM\Query\SqlWalker))
#3 /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/SqlWalker.php in /home/dporter/projects/list_management/vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php on line 235
问题
如何创建一个原则查询来获得我在上面“我正在尝试什么”部分中概述的结果。
谢谢
【问题讨论】:
标签: php symfony orm doctrine-orm