Symfony SELECT 查询 returns 所有列,除了一个与其他 table 相关的列?
Symfony SELECT query returns all columns, except one with relation to other table?
数据库:
here
控制器:
$comments = $commentRepo->getPaginationPost($recordsPerPage, $offset, $id);
dump($comments); exit;
存储库:
public function getPaginationPost($limit, $offset, $postId)
{
$qb = $this->createQueryBuilder('c')
->where('c.postId = :postId')
->setParameter('postId', $postId)
->andWhere('c.replyTo = 0')
->orderBy('c.dateAdded', 'DESC')
->setMaxResults($limit)
->setFirstResult($offset)
->getQuery();
return $qb->getArrayResult();
}
实体:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Tests\Fixtures\Person;
/**
* Comment
*
* @ORM\Table(name="comment")
* @ORM\Entity(repositoryClass="AppBundle\Repository\CommentRepository")
*/
class Comment
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="content", type="text")
*/
private $content;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="comments")
* @ORM\JoinColumn(name="person_id", referencedColumnName="id")
*/
private $person;
嗯,转储的结果是完整的数据,除了列 person (person_id)。任何想法为什么会这样? Person 列是 oneToMany 关系,它们都有 getter 和 setter。
来自 dump()
的结果:
ArticleController.php on line 183:
array:10 [
0 => array:5 [
"id" => 168
"content" => "Лошо е"
"dateAdded" => DateTime {#7320
+"date": "2019-01-09 11:02:35.000000"
+"timezone_type": 3
+"timezone": "UTC"
}
"replyTo" => 0
"postId" => 8
]
1 => array:5 [
"id" => 167
"content" => "нееее лошооо"
"dateAdded" => DateTime {#7321
+"date": "2019-01-08 16:07:09.000000"
+"timezone_type": 3
+"timezone": "UTC"
}
"replyTo" => 0
"postId" => 8
]
]
...
您没有在查询中加入实体。
public function getPaginationPost($limit, $offset, $postId)
{
$qb = $this->createQueryBuilder('c')
->join('c.person', 'p') // <--- see this
->addSelect('p')
->where('c.postId = :postId')
->setParameter('postId', $postId)
->andWhere('c.replyTo = 0')
->orderBy('c.dateAdded', 'DESC')
->setMaxResults($limit)
->setFirstResult($offset)
->getQuery();
return $qb->getArrayResult();
}
数据库:
here
控制器:
$comments = $commentRepo->getPaginationPost($recordsPerPage, $offset, $id);
dump($comments); exit;
存储库:
public function getPaginationPost($limit, $offset, $postId)
{
$qb = $this->createQueryBuilder('c')
->where('c.postId = :postId')
->setParameter('postId', $postId)
->andWhere('c.replyTo = 0')
->orderBy('c.dateAdded', 'DESC')
->setMaxResults($limit)
->setFirstResult($offset)
->getQuery();
return $qb->getArrayResult();
}
实体:
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Tests\Fixtures\Person;
/**
* Comment
*
* @ORM\Table(name="comment")
* @ORM\Entity(repositoryClass="AppBundle\Repository\CommentRepository")
*/
class Comment
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="content", type="text")
*/
private $content;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\User", inversedBy="comments")
* @ORM\JoinColumn(name="person_id", referencedColumnName="id")
*/
private $person;
嗯,转储的结果是完整的数据,除了列 person (person_id)。任何想法为什么会这样? Person 列是 oneToMany 关系,它们都有 getter 和 setter。
来自 dump()
的结果:
ArticleController.php on line 183:
array:10 [
0 => array:5 [
"id" => 168
"content" => "Лошо е"
"dateAdded" => DateTime {#7320
+"date": "2019-01-09 11:02:35.000000"
+"timezone_type": 3
+"timezone": "UTC"
}
"replyTo" => 0
"postId" => 8
]
1 => array:5 [
"id" => 167
"content" => "нееее лошооо"
"dateAdded" => DateTime {#7321
+"date": "2019-01-08 16:07:09.000000"
+"timezone_type": 3
+"timezone": "UTC"
}
"replyTo" => 0
"postId" => 8
]
]
...
您没有在查询中加入实体。
public function getPaginationPost($limit, $offset, $postId)
{
$qb = $this->createQueryBuilder('c')
->join('c.person', 'p') // <--- see this
->addSelect('p')
->where('c.postId = :postId')
->setParameter('postId', $postId)
->andWhere('c.replyTo = 0')
->orderBy('c.dateAdded', 'DESC')
->setMaxResults($limit)
->setFirstResult($offset)
->getQuery();
return $qb->getArrayResult();
}