gpt4 book ai didi

php - 在 symfony 中选择 join with doctrine

转载 作者:行者123 更新时间:2023-11-29 03:47:59 25 4
gpt4 key购买 nike

这会生成错误的 ON 子句:

public function findByAdOwner($ownerId)
{
$qb = $this->getEntityManager()->createQueryBuilder('n');

return $qb->select('n')
->from('DelivveWebBundle:UserAd', 'n')
->join('DelivveWebBundle:Ad', 'ad', "WITH", "n.ad = ad.id")
->where('ad.owner = :ownerId')
->setParameter('ownerId', $ownerId)
->getQuery()
->getResult()
;
}

[2/2] DBALException: An exception occurred while executing 'SELECT u0_.status AS status0, u0_.user_id AS user_id1, u0_.ad_id AS ad_id2 FROM user_ad u0_ INNER JOIN my_ad m1_ LEFT JOIN Deliver d2_ ON m1_.id = d2_.id LEFT JOIN Sender s3_ ON m1_.id = s3_.id AND (u0_.ad_id = m1_.id) WHERE m1_.user_id = ?' with params [1]:

我哪里错了?

最佳答案

广告.php

class Ad
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @var ArrayCollection
*
* @ORM\OneToMany(targetEntity="UserAd", mappedBy="ad")
*/
protected $interestedUsers;
}

用户广告.php

/*     *@ORM\Entity(repositoryClass="Delivve\WebBundle\Entity\UserAdRepository")
*/
class UserAd
{
/**
* @ORM\Id()
* @ORM\ManyToOne(targetEntity="User", inversedBy="interestInAds")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
**/
protected $user;

/**
* @ORM\Id()
* @ORM\ManyToOne(targetEntity="Ad", inversedBy="interestedUsers")
* @ORM\JoinColumn(name="ad_id", referencedColumnName="id")
**/
protected $ad;
}

UserAdRepository.php

class UserAdRepository extends EntityRepository
{
public function findByAdOwner($ownerId)
{
$qb = $this->getEntityManager()->createQueryBuilder('n');

return $qb->select('n')
->from('DelivveWebBundle:UserAd', 'n')
->join('n.ad', 'ad')
->where('ad.owner = :ownerId')
->setParameter('ownerId', $ownerId)
->getQuery()
->getResult()
;
}
}

可以通过修改后的结果获得预期的结果,连接是使用自己的表元素完成的,并且已经在 UserAd 实体中添加了一个注释,它已经直接调用了表

AdController.php

...
$owner = $this->getUser();

$repository = $this->getDoctrine()->getRepository('DelivveWebBundle:UserAd');

$notifications = $repository->findByAdOwner($owner->getId());
...

关于php - 在 symfony 中选择 join with doctrine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32338834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com