获取其字段的至少一部分以某个字符串参数开头的所有实体

时间:2015-03-10 21:54:47

标签: symfony doctrine-orm

我有一个带有dept字段的实体,该字段是一个未定义的字符串数字,代表邮政编码,由字符-分隔。

示例:

  

35000-35200-35700

我怎样才能获得dept字段的至少一部分以某个字符串参数开头的所有实体?

class Town {

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

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

我希望有这样的内容,35$str参数,例如:

$em->getRepository("Town")->findByDeptAutoComplete($str);

1 个答案:

答案 0 :(得分:2)

我是你,我会将这些邮政编码存储在另一个实体中。 (我假设您的字符串由-分隔,是邮政编码。)

但要回答有关查找至少部分dept字段以字符串参数开头的实体的问题,您可以测试town.dept是否包含-35(分隔符+部门35,在示例中),然后测试字符串的开头(以捕获第一个邮政编码):

public function findByDeptAutoComplete($dept) {
    $queryResult = $this->createQueryBuilder('town')
            ->select('town')
            ->where("LOCATE(CONCAT('-', :dept),  town.dept) > 0 OR SUBSTRING(town.dept, 1, LENGTH(:dept)) = :dept")
            ->setParameter('dept', $dept)
            ->getQuery()
            ->getResult()
    ;
    return $queryResult;
}