MySQL データベースに doctrine2 の問題があります。
私はモデルUser
とモデルを持っていDocuments
ます。それぞれUser
0 または n を持つことができますDocuments
。それぞれDocument
が正確に 1 つの に割り当てられUser
ます。私のモデル:
ユーザー
<?php
namespace Entity;
/**
* @Entity(repositoryClass="Entity\Repository\UserRepository")
* @Table(name="user")
*/
class User extends Object
{
/**
* @Id @GeneratedValue(strategy="UUID")
* @Column(type="string", length=36)
* @var string
*/
protected $id;
/**
* @OneToMany(targetEntity="\Entity\Document", mappedBy="user")
*/
private $documents;
public function __construct($options = array())
{
$this->documents = new \Doctrine\Common\Collections\ArrayCollection;
}
}
書類
<?php
namespace Entity;
/**
* @Entity(repositoryClass="Entity\Repository\DocumentRepository")
* @Table(name="document")
*/
class Document extends Object
{
/**
* @Id @Column(type="string")
* @var string
*/
protected $id;
/**
* @ManyToOne(targetEntity="\Entity\User", inversedBy="documents")
* @JoinColumn(name="user_id", referencedColumnName="id")
* @var User
*/
private $user;
}
User
今、私は与えられたDocument
IDのを取得したい. SQL クエリは次のようになります。
SELECT u.*
FROM `user` u
INNER JOIN `document` d ON d.user_id = u.id
WHERE d.id = 'mydocumentid'
しかし、これは機能しません:
$user = $queryBuilder
->select('u.*')
->from('\\Entity\\User', 'u')
->innerJoin('\\Entity\\Document', 'd', \Doctrine\ORM\Query\Expr\Join::ON, 'd.user_id = u.id')
->where('d.id = :documentId')
->setParameter('documentId', 'mydocumentid')
->setMaxResults(1)
->getQuery()
->getSingleResult();
また、直接クエリは機能しません:
$query = $em->createQuery('
SELECT
u.*
FROM
Entity\\User u
INNER JOIN
Entity\\Document d ON d.user_id = u.id
WHERE
d.id = "mydocumentid"
');
これを実行するのを手伝ってくれませんか?
エラーメッセージ
[Semantical Error] line 0, col 66 near 'd ON d.user_id': Error: Identification Variable \Entity\Document used in join path expression but was not defined before.