在symfony 4.1上使用queryBuilder原理创建leftjoin

时间:2018-08-05 22:49:46

标签: mysql symfony doctrine

我正在尝试进行leftjoin,但出现此SQL错误 enter image description here

所以我有两个实体帖子和评论 1个帖子

<?php

 namespace App\Entity;

 use Doctrine\ORM\Mapping as ORM;
 use App\Utils\Slugger;
 use Symfony\Component\Validator\Constraints as Assert;
 use Symfony\Component\HttpFoundation\File\UploadedFile;

/**
 * @ORM\Entity(repositoryClass="App\Repository\PostRepository")
 */
 class Post
 {
  /**
   * @ORM\Id()
   * @ORM\GeneratedValue()
   * @ORM\Column(type="integer")
   */
   private $id;

   /**
   * @ORM\Column(type="string", length=255,unique=true)
   */
   private $title;

我有更多的字段,但不是必须要解决的问题。

和评论实体

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
  * @ORM\Entity(repositoryClass="App\Repository\CommentsRepository")
  */
 class Comments
 {
    /**
    * @ORM\Id()
    * @ORM\GeneratedValue()
    * @ORM\Column(type="integer")
    */
    private $id;


   /**
    * @ORM\ManyToOne(targetEntity="App\Entity\Post")
    */
    private $post;

在这个实体中,我与ManyToOne有关系,一切都很好。

所以我的问题是我试图在PostRepository上获取所有帖子评论(我认为没有必要为一种方法创建CommentRepository) 这是我的PostRepositoy

<?php
 namespace App\Repository;
 use App\Entity\Post;
 use App\Entity\Comments;
 use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
 use Symfony\Bridge\Doctrine\RegistryInterface;
 class PostRepository extends ServiceEntityRepository
 {
     public function __construct(RegistryInterface $registry)
     {
       parent::__construct($registry, Post::class);
     }

   public function findComments($post)
   {

    return $this->createQueryBuilder('p')
        ->leftJoin(Comments::class,'c')
        ->andWhere('c.post = :val')
        ->setParameter('val', $post)
        ->orderBy('p.id', 'ASC')
        ->getQuery()
        ->getResult()
        ;
   }

有人可以帮助我吗?我可以使用dql或createQuery并使用其他选项,但是我想这样做,但是我认为查询不正确。

0 个答案:

没有答案