php - 查询未获取相关表中的所有结果
问题描述
在我的 symfony 测试项目中,我有两个表,用户与航班相关。在这种结构中,Flight 对用户有 fk
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();
}
推荐阅读
- c - 使用clang而不是gcc链接成功(Debian Bullseye amd64上的-llzma)
- javascript - 如何使用 node-gyp 构建 python?
- swift - 从 Swift 包中加载字体
- java - SnakeYaml 输出 yaml 与转储 yaml 不匹配
- javascript - 无法理解为什么 JS 代码不在 JS Bin 中运行
- sql - UTL_FILE 保存在本地机器中
- python - Python:从 localhost 访问页面时出现 404 错误
- npm - 如何在 GitLab NPM Registry 中发布我的 npm 包?
- elasticsearch - 将 dotCMS 集群连接到外部 elasticsearch
- java - 字段需要找不到类型的 bean