- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个有效的 SQL 查询,它从 SQL 命令行返回行,但通过 Doctrine 提交时则不会。我认为问题在于我如何设置ResultSetMapper
。我读过docs关于 native 查询,但我一定错过了一些东西。它是什么?
从 SQL 命令行运行以下查询会生成 1 行:
SELECT t.*
FROM
StateLogItem s NATURAL JOIN (
SELECT
task_id,
MAX(
COALESCE(updatedAt, createdAt)
) d,
MAX(id) id
FROM
StateLogItem
WHERE
dtype = 'transitionlogitem'
GROUP BY
task_id
) m
RIGHT JOIN Task t ON t.id = s.task_id
WHERE s.toState = 'started';
'20', 1, NULL, 'just because', '2014-07-18 10:49:00', NULL
ResultSetMapping
当我尝试通过 Symfony EntityRepository 中的 Doctrine 运行相同的查询时(如下所示),即使 Symfony 探查器指示正确的查询已成功运行,我也得到零行。
public function findByActionStatus($status){
$sql = "SELECT t.id, t.description, t.created_by, t.updated_by, t.createdAt, t.updatedAt
FROM StateLogItem s
NATURAL JOIN (
SELECT task_id, MAX(COALESCE(updatedAt,createdAt)) d, MAX(id) id
FROM StateLogItem
WHERE dtype = 'transitionlogitem'
GROUP BY task_id
) m
RIGHT JOIN Task t ON t.id=s.task_id
WHERE s.toState = :status";
$em = $this->getEntityManager();
$rsm = new ResultSetMapping();
$rsm->addEntityResult('ACCQueueBundle:Task', 't');
$rsm->addFieldResult('t','t.id','id');
$rsm->addFieldResult('t','t.created_by','createdBy');
$rsm->addFieldResult('t','t.updated_by','updatedBy');
$rsm->addFieldResult('t','t.description','description');
$rsm->addFieldResult('t','t.createdAt','createdAt');
$rsm->addFieldResult('t','t.updatedAt','updatedAt');
$rsm->addJoinedEntityResult('ACCQueueBundle:TransitionLogItem','s','t','transitions'); //tried with and without
$query = $em->createNativeQuery($sql,$rsm);
$query->setParameter('status', $status);
return $query->getResult();
}
Task
实体如下所示:
namespace ACC\QueueBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
use ACC\Traits\BlameableTrait;
use ACC\MainBundle\Entity\Traits\HasDocumentsTrait;
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\Timestampable\Traits\TimestampableEntity;
/**
* Task
* @ORM\Entity(repositoryClass="ACC\QueueBundle\Entity\TaskRepository")
* @ORM\HasLifecycleCallbacks()
*
*/
class Task {
use HasDocumentsTrait;
use BlameableTrait;
use TimestampableEntity;
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var Transition
*
* @ORM\OneToMany(targetEntity = "TransitionLogItem", mappedBy = "task", orphanRemoval = true, cascade = {"persist"})
* @ORM\OrderBy({"createdAt" = "ASC"})
*/
protected $transitions;
/**
* @var Pause
*
* @ORM\OneToMany(targetEntity = "PauseLogItem", mappedBy = "task", orphanRemoval = true, cascade = {"persist"})
* @ORM\OrderBy({"createdAt" = "ASC"})
*/
protected $pauses;
/**
* @var string
*
* @ORM\Column(name="description", type="text")
*/
protected $description;
/**
* @ORM\ManyToMany(targetEntity = "ACC\MainBundle\Entity\Document", cascade={"persist","remove"})
* @ORM\JoinTable(name="Task_Document",
* joinColumns={@ORM\JoinColumn(name="task_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="document_id", referencedColumnName="id", unique=true)})
*/
protected $documents;
//etc.
最佳答案
好吧,我发现了问题。这是由于 ResultSetMapping
不理解我给它的查询字段名称引起的,因为我包含了表前缀。所以我可以不包含表前缀,
即将 $rsm->addFieldResult('t','t.id','id');
更改为 $rsm->addFieldResult('t','id','id' );
或者我可以为所有字段添加别名:
即将 SELECT t.id, t.description...
更改为 SELECT t.id AS t_id, t.description AS t_description...
关于symfony - 教义 createNativeQuery 不返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24890930/
我想检测不等于 1,2,3 或 NULL 的 id。这是我的查询: $qb = $this->_em->createQueryBuilder() ->select('u.cityId')
tl;博士 我有一个有效的 SQL 查询,它从 SQL 命令行返回行,但通过 Doctrine 提交时则不会。我认为问题在于我如何设置ResultSetMapper。我读过docs关于 native
我正在创建只有两个实体的小型应用程序,Order 和 Shipment。 Shipment 实体如下:(为了简短起见删除了方法) /** * @var integer $id * * @ORM\
是否可以在 Doctrine 2 中指定 unsigned integer 的列类型? 最佳答案 /** * @ORM\Column(name="id", type="integer", option
有谁知道有没有使用 Doctrine 而不使用 DQL 的快速方法来获取表中的所有记录。 我错过了什么,还是你需要在类里面编写公共(public)函数? 最佳答案 如果你有一个实体类( Doctrin
我在 MySQL 中有这个查询,我想应用到学说中 SELECT * FROM ads_list AS al LEFT JOIN (ads_category AS ac, ads_category_ma
让我们看看我的类(class)。可以看到,Model中有Batteries,这是ManyToMany的关系。模型还有 1 block 电池,这是数量最多的电池之一。 例如,我想选择电池(不是任何一个电
也许有人可以帮我改造 我试图通过 page_id 获取与 theFaqPageQuestionContent 无关的 QuestionContent 并在选择框中查看它 SELECT q FROM V
我正在尝试使用表情符号保存文本。然而,表情符号不存储在文本中。我得到的不是表情符号,而是 ? 在数据库中。 # Doctrine Configuration doctrine: dbal
我正在尝试使用方法 ArrayCollection::contains 来查找对象是否已经在我的集合中,但是当我这样做时: //My ArrayCollection $lesRoles = $drt-
我正在使用 Doctrine's 2 Tree-Nestedset extension使用 MySQL IndoDB 数据库。 yml 表架构如下所示: Ext\Entity\PageElement:
我该怎么办 WHERE id != 1 在教义中? 到目前为止我已经有了 $this->getDoctrine()->getRepository('MyBundle:Image')->findById
使用具有结构的表: id | count /string/id1 | 3 /string/id1/r1 | 2 /string/id1/r2 | 1 /strin
DBAL 查询生成器: http://www.doctrine-project.org/api/dbal/2.3/class-Doctrine.DBAL.Query.QueryBuilder.html
使用 Doctrine,我的实体中有 fetch=EAGER : class TrainingOrganization { /** * @var TrainingOrganizati
我只是想知道 Doctrine 与 Symfony 中双向关系的优点/缺点是什么? 我所有的关系都是双向的,但我不确定这是否会导致问题...... 谢谢。 最佳答案 只要您不将关系标记为EAGER,我
使用具有结构的表: id | count /string/id1 | 3 /string/id1/r1 | 2 /string/id1/r2 | 1 /strin
我正在寻找一种将数组转换为学说实体的方法。我正在使用原则 2。 我有一个实体类,例如: class User { /** * @Id * @Column(type="int
所以我有这两个类,它们之间有 OneToMany 和 ManyToOne 关系: 命名空间 RM\Entity; 使用 Doctrine\Common\Collections\ArrayCollect
我有一个Application与 ApplicationFile 有关系: /** * @ORM\OneToMany( * targetEntity="AppBundle\Entity\App
我是一名优秀的程序员,十分优秀!