获取其字段的至少一部分以某个字符串参数开头的所有实体
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;
}
我有一个实体,其部门字段是代表邮政编码的未定义数量的字符串,由字符 -
分隔。
示例:
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;
}