symfony2一对一反转始终返回相同的结果

时间:2015-06-23 14:53:08

标签: php symfony doctrine-orm twig one-to-one

我有两个由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所播放的查询时,我看到了:

  • 关于联系表的查询
  • 检索城市的另外10个查询,这些查询完全不同(为每个联系人返回不同的城市)

我现在找到的唯一解决方案是在地址表上建立连接并返回结果数组:

$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个联系人都显示相同的城市(属于联系人数组的第一个结果

  • 联系方式1:纽约
  • 联系方式2:纽约
  • ...
  • 联系方式10:纽约

如果我更改了第一个结果:

$qb = $this->createQueryBuilder('c');
$qb ->orderBy('c.Name')
    ->setMaxResults(10)
    ->setFirstResult(151);

我得到类似的东西:

  • 联络151:洛杉矶
  • 联络152:洛杉矶
  • ...
  • 联络160:洛杉矶

我做错了什么?

感谢。

0 个答案:

没有答案