簡単なクエリがあります
$query = $em->createQuery(''
. 'SELECT c.id, c.firstname, c.lastname, coun.country '
. 'FROM OandPboBundle:Clients c '
. 'JOIN OandPboBundle:Countries coun WITH coun.id = c.country '
. 'WHERE c.id = ?1'
)
->setParameter(1, $id)
->setMaxResults(1);
$result = $query->getResult();
ご覧のとおり、Countries エンティティと一対一の関係を持つ Clients エンティティです。したがって、クライアント テーブルに country_id フィールドがあります。ただし、country は null フィールドです。country は必須ではないため、country_id フィールドは null である可能性があります。
そのため、クエリを実行すると、国がない場合 (NULL)、クエリは NO LINE を返します。左結合が存在しないためです。そして、国がある場合はもちろん一行返します。
国がなくてもクエリが CLIENT 行を返すようにするにはどうすればよいですか?
みなさん、よろしくお願いします
CLIENTS エンティティを配置する場合
class Clients
{
/**
* @ORM\OneToOne(targetEntity="OandP\boBundle\Entity\Countries", cascade={"persist"})
* @ORM\JoinColumn(nullable=true)
*/
private $country = null;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
}
そして COUNTRIES エンティティ
class Countries
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="code", type="string", length=2)
*/
private $code;
/**
* @var string
*
* @ORM\Column(name="country", type="string", length=255)
*/
private $country;