我有一个带有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);
答案 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;
}