使用doctrine 2限制查询记录中字段的字符串长度

时间:2014-10-24 18:39:06

标签: php mysql symfony doctrine-orm

这应该是非常简单的回答,我总是检查答案,并投票支持任何人。

我无法正确写字或查找文档。我使用createQueryBuilder并根据一些变量选择实体/记录。我想要做的是定位和限制查询中特定属性/字段的长度。实体相当大,所以我真的想要只是针对这个领域。我尝试在select语句中使用SUBSTRING(STR,START,END),但它似乎并没有起作用。选择的快速片段看起来像......

->select("p as post, SUBSTRING(p.body, 0, 30) as body")

我希望能够定位post.body,但发布不是类错误。 :/

1 个答案:

答案 0 :(得分:1)

Here是你的答案。索引字符时,SUBSTRING从1开始。遗憾的是,在Doctrine文档中没有提到这一点 如果将标量数据添加到选择中,Doctrine也不会将post转换为实体。
您可以尝试将body(或其他)属性映射为SUBSTRING(body, 1, 30),也可以修改属性getter。

/** @Entity */
class Post
{
    //...

    /** @Column(name="SUBSTRING(body, 1, 30)") */
    private $bodyExcerpt;

    /** @Column(name="body") */
    private $body;

    public function getBody($excerptOnly = true) {
        if ($excerptOnly) {
            return substr($this->body, 0, 30);
        } else {
            return $this->body;
        }
    }
}