我想使用doctrine join选择两个实体。
$query = $em->createQuery("SELECT u, a FROM User u JOIN u.addresses a WHERE a.city = 'Berlin'");
$users = $query->getResult();
我已关注documentation here,查询工作正常,但我没有管理如何获取第二个实体。
我尝试了这个,但它加载了空洞地址数组
foreach($users as $user){
echo($user->getAddresses();//this contains all addresses not the filtered address
}
文档中提到了有关水合变量User#address的内容,但没有提到如何获取它。
User.orm.yml
Home\DinnerBundle\Entity\User:
type: entity
table: user
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
first:
type: string
last:
type: string
oneToMany:
addresses:
targetEntity: Address
mappedBy: user
Address.orm.yml
Home\DinnerBundle\Entity\Address:
type: entity
table: address
id:
id:
type: integer
generator: { strategy: AUTO }
fields:
id:
type: integer
nullable: true
street_line:
type: text
city:
type: string
state:
type: string
manyToOne:
user:
targetEntity: User
inversedBy: addresses
joinColumn:
name: user_id
referencedColumnName: id
答案 0 :(得分:0)
使用QueryBuilder,代码将是这样的:
$results = $em->getRepository('YourBundle:User')
->createQueryBuilder('user')
->join('user.address', 'address')
->where('address.city = :city_name')
->setParameter('city_name', "Berlin")
->getQuery()
->getResult();
注意:->setParameter('city_name', "Berlin")
//仅适用于只有参数的情况,当您需要使用多个->setParameters(array('param_name' => $param_value, 'param_name_1' => $param_value_1))
文档为here
答案 1 :(得分:0)
为什么不使用实体管理器查询构建器? 它会自动为你加入的实体加水。
这是一段代码:
public function query(){
$queryBuilder = $this->_em->createQueryBuilder();
$queryBuilder->addSelect('user')
->join('user.address','address')
->where('address.city = :cityParameter')
->setParameter('cityParameter', 'Berlin');
$query = $queryBuilder->getQuery();
$result = $query->getResult();
return $result;
}