我有两个由1 :: 1关系链接的表:
UPDATE1 这是控制器:
public function ajaxSearchAction(Request $request)
{
if (! $request->isXmlHttpRequest()) {
throw new NotFoundHttpException();
}
$em = $this->getDoctrine()->getManager();
$sc = $this->get('security.context');
$bh = $this->get('helper.behavior');
$form = $this->createForm(new ContactSearchType($em, $sc, $bh), new ContactSearch());
$form->handleRequest($request);
$contacts = null;
if ($form->isValid()) {
$contacts = $em
->getRepository('CoreBundle:Contact')
->getSearchResult($form->getData());
}
return $this->render('CoreBundle:Contact:searchResults.html.twig', [
'contacts' => $contacts,
]);
}
它显示搜索表单的结果。 表单是典型的(代理实体ContactSearch,映射搜索所需的所有字段,以及表单ContactSearchType)
UPDATE2 一个更简单的控制器:
$contacts = $this->getDoctrine()
->getRepository('CoreBundle:Contact')
->findBy([], ['name' => 'ASC'], 10);
foreach ($contacts as $contact) {
var_dump($contact->getAddress()->getCity());
}
var_dump为所有联系人提供了相同的城市 但是当我检查调试器并查找Doctrine所播放的查询时,我看到了:
我现在找到的唯一解决方案是在地址表上建立连接并返回结果数组:
$qb = $this->createQueryBuilder('c');
$qb ->select('c, a')
->join('c.ctcAdr', 'a');
$qb ->getQuery()->getArrayResult();
然后它有效。
与
/**
* @var Address
* @ORM\OneToOne(targetEntity="MyBundle\Entity\Address", mappedBy="contact")
*/
private $address;
/**
* Get address
*
* @return Address
*/
public function getAddress()
{
return $this->address;
}
/**
* Set address
*
* @param Address $address
* @return Contact
*/
public function setAddress(Address $address)
{
$this->address = $address;
$address->setContact($this);
return $this;
}
地址
/**
* @var Contact
*
* @ORM\OneToOne(targetEntity="MyBundle\Entity\Contact", inversedBy="address", cascade={"persist"})
* @ORM\JoinColumn(name="C_ID", referencedColumnName="C_ID")
*/
private $contact;
/**
* Set contact
*
* @param Contact $contact
* @return Contact
*/
public function setContact(Contact $contact)
{
$this->contact = $contact;
return $this;
}
/**
* Get contact
*
* @return Contact
*/
public function getContact()
{
return $this->contact;
}
在我的ContactRepository中,我有这个简单的查询生成器:
ContactRepository
$qb = $this->createQueryBuilder('c');
$qb ->orderBy('c.Name')
->setMaxResults(10);
return $qb->getQuery()->getResult();
在我的数据库中,所有这十个联系人结果都有不同的地址(城市,邮政编码等......)
Twig模板
{% for contact in contacts %}
<div>
- {{ contact.name }} : {{ contact.address.city }}
</div>
{% endfor %}
但是当我想显示它们时,所有10个联系人都显示相同的城市(属于联系人数组的第一个结果
如果我更改了第一个结果:
$qb = $this->createQueryBuilder('c');
$qb ->orderBy('c.Name')
->setMaxResults(10)
->setFirstResult(151);
我得到类似的东西:
我做错了什么?
感谢。