我正在为我的公司实体创建搜索功能,并使用Symfony 2和Doctrine ORM将我的逻辑放在自定义实体存储库中。
公司实体具有子集合位置,因为公司可以有多个位置,以及公司名称字段。
我想知道是否可以使用查询构建器按公司名称和位置[1]。地址,位置[2]。地址等进行搜索。
这是我到目前为止所找不到的好资源。
trait ZealousNode extends ScrumptiousTypes.Node
看起来这不起作用:
*/ AppBundle/Repository/CompanyRepository.php */
class CompanyRepository extends EntityRepository
{
public function findBySearch($options)
{
$query = $this->createQueryBuilder('c');
foreach ($options as $key => $value) {
$query->where('c.' . $key . ' LIKE :' . $key);
$query->setParameter($key, '%' . $value . '%');
}
return $query->getQuery()->getResult();
}
}
findBySearch()中$ options参数的一个例子是:
$query->where('c.locations.city LIKE $city);
非常感谢任何有关资源的建议或链接。
答案 0 :(得分:1)
您选择了c
,之后您想要找到某个位置的公司,这意味着您应该在公司实体中使用(类型位置)字段location
。位置实体shoud有field(string)city。公司实体中的字段位置应具有带有LocationEntity的oneToMany association。之后,当您添加公司名称时,您还将添加公司的位置。现在你可以写:
$query->leftJoin('c.locations', 'locations');
$query->where('locations.city LIKE :city');
$query->setParameter('city', '%'.$city.'%')
如果你想使用location对象的c.locations.city
属性,你应该调用那里的关联。像leftJoin, innerJoin
一样。但我认为innerJoin
这里会更好,只需要两行。
$query->innerJoin('c.locations', 'locations', 'WITH', 'locations.city LIKE (:city)')
$query->setParameter('city', '%'.$city.'%')
答案 1 :(得分:0)
尝试将$query->where
更改为$query->andWhere
->andWhere()
可以直接使用,没有任何 - >