繁体   English   中英

查询未获取相关表中的所有结果

[英]query is not fetching all the results in related tables

在我的symfony测试项目中,我有两个表,用户与飞行有关。 在这种结构中,航班已经吸引了用户

users

id | name | email |
1  | fen  | f.com |
2  | foo  | o.com |

flight
id | path | desc | dureation | users|
1  | 123  | xyz  | 3         | 1

我在存储库中使用以下查询来提取用户ID为1的所有数据。

class FlightRepository extends \Doctrine\ORM\EntityRepository
{
    public function findWithFlights($id)
{
    $queryBuilder = $this->createQueryBuilder('u')
        ->join('u.flights', 'i')
        ->where('u.id = :id')
        ->setParameter('id', $id);
    return $queryBuilder->getQuery()->getResult();
}

当在控制器中使用以下命令调用时,上面的命令仅返回这种情况下的路径飞行场123

$restresults2 = $this->getDoctrine()
            ->getRepository('MyBundle:Flights')
                ->findWithFlights($id);
$response = new Response(json_encode($restresults2));
        $response->headers->set('Content-Type', 'application/json');

return $response;

编辑以显示实体模型

/**
 * Users
 *
 * @ORM\Table()
 * @ORM\Entity
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="MyBundle\Repository\UsersRepository")
 */
class Users
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=255, nullable=true)
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=255, nullable=true)
     */
    private $email;

    getters and setters


/**
     * @ORM\OneToMany(targetEntity="Flights", mappedBy="users")
     */
    private $flights;


    /**
     * 
     *
     * @param \MyBundle\Entity\Flights $flights
     * @return Users
     */
    public function addFlights(\MyBundle\Entity\Flights $flights)
    {
        $this->flights[] = $flights

        return $this;


    }


    /**
     * Get flights
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getFlights()
    {
        return $this->flights;
    }

    /**
     * Remove Flights
     *
     * @param \MyBundle\Entity\Flights $flights
     */
    public function removeFlights(\MyBundle\Entity\Flights $flights)
    {
        $this->flights->removeElement($flights);
    }   



******************  Flights entity **************************8
/**
 * Flights
 *
 * @ORM\Table()
 * @ORM\Entity
 * @ORM\Table(name="flights") 
 */
class Flights
{

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


    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    public $path;

    getters and setters here

    /**
     * @ORM\ManyToOne(targetEntity="Users", inversedBy="flights")
     * @ORM\JoinColumn(name="usersfk", referencedColumnName="id")
     */
    private $users;


    /**
     * Set Users
     *
     * @param \MyBundle\Entity\Users $users 
     * @return Flights
     */
    public function setUsers(\MyBundle\Entity\Users $users = null)
    {
        $this->users = $users;

        return $this;
    }

    /**
     * Get Users
     *
     * @return \MyBundle\Entity\Users
     */
    public function getUsers()
    {
        return $this->users;
    }

请问我的回购查询可能有什么问题

好的,这里有些问题。 但首先,您应该问自己:用户和航班是否不应该具有多对多关系? 在当前模型中,一个航班只能有一个用户,并且同一用户可以连接到多个航班。 你真的想要这个吗?

然后,当您查询时,您应该问自己: 我想要用户结果还是航班结果,并在要获取结果的存储库中创建查询构建器。

如果您希望获得用户的所有航班,则应查询以下内容:

class FlightRepository extends \Doctrine\ORM\EntityRepository
{
public function findWithFlights($id)
{
$queryBuilder = $this->createQueryBuilder('f')
    ->join('f.users', 'u')
    ->where('u.id = :id')
    ->setParameter('id', $id);
return $queryBuilder->getQuery()->getResult();
}

用户字段不存在,因为默认情况下,该理论仅获取属于相应存储库的实体数据。 (选择('u'))。 添加适当的select语句以向Doctrine显示要获取的内容。 我相信您的情况将是select(['u','i'])

class FlightRepository extends \Doctrine\ORM\EntityRepository
{
  public function findWithFlights($id) {
    $queryBuilder = $this->createQueryBuilder('u')
      ->select(['u', 'i'])
      ->join('u.flights', 'i')
      ->where('u.id = :id')
      ->setParameter('id', $id);

      return $queryBuilder->getQuery()->getResult();
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM