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

Get all entities in which at least one part of its field starts with some string parameter

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

示例:

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);

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

但是要回答您关于查找实体的问题,其中至少部门字段的一部分以某个字符串参数开头,您可以测试 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;
}