Php 如何通过';属性';()?
我有一个实体Php 如何通过';属性';()?,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我有一个实体 class Developer extends CustomUser { /** * @var string * * @ORM\Column(name="unsubscribe_token", type="string", length=60, nullable=true) */ private $unsubscribeToken; // ... } 和实体用户 class CustomUser {
class Developer extends CustomUser
{
/**
* @var string
*
* @ORM\Column(name="unsubscribe_token", type="string", length=60, nullable=true)
*/
private $unsubscribeToken;
// ...
}
和实体用户
class CustomUser
{
/**
* @var string
*
* @ORM\Column(name="role", type="string", length=25, nullable=false)
* Assert\NotBlank
*/
protected $roles = 'ROLE_AGENT';
// ...
}
和一个动作
public function indexAction()
{
$role = 'ROLE_FREELANCER';
$em = $this->getDoctrine()->getManager();
$all_developer = $this->getDoctrine()->getRepository('ArtelProfileBundle:Developer')->findAll();
$dev_freelancer = $em->getRepository('ArtelProfileBundle:Developer')
->findBy(array('roles' => $role, 'level' => 'Middle', 'unsubscribeToken' => ??));
return $this->render('ArtelProfileBundle:Dachboard:index.html.twig', array(
'developer' => $all_developer,
'developer_freelancer' => $dev_freelancer,
));
}
public function getDevelopersWithRoleAndNullToken($role)
{
$qb = $this->getEntityManager()->createQueryBuilder('d');
$qb
->select('d')
->from('ArtelProfileBundle:Developer', 'd')
->where('d.role = :role')
->andWhere('d.token IS NOT NULL')
->setParameter('role', $role)
->getQuery();
$query = $qb->getQuery();
$results = $query->getResult();
return $results;
}
[语义错误]第0行,第53列“role=:role”附近:错误:Class Artel\ProfileBundle\Entity\Developer没有名为role的字段或关联
在我的数据库manydeveloper中,我想找到所有扮演自由职业者和退订者角色的开发人员。我是怎么做到的?FindBy会找到所有的,FindOneBy只有一个 所以 考虑到你的领域被称为角色,你必须这样做
$dev_freelancer = $em->getRepository('ArtelProfileBundle:Developer')->findBy(array('role' => $role));
这是你的文件
如果您想找到rol是自由职业者且令牌不为null的开发人员,您应该通过QueryBuilder进行查找,但无法通过NOTNULL值进行查找
像这样的
public function getDevelopersWithRoleAndNullToken($role)
{
$qb = $this->getEntityManager()->createQueryBuilder('d');
$qb
->select('d')
->from('ArtelProfileBundle\Entity\Developer', 'd')
->where('d.roles = :role')
->andWhere('d.unsubscribeToken IS NOT NULL')
->setParameter('role', $role)
->getQuery();
return $qb->getResult();
}
然后从控制器
$developersRolAndNullToken = $em->getRepository('ArtelProfileBundle:Developer')->getDevelopersWithRoleAndNullToken($role);
->findBy(array(**field**=>**value**))
将实现这一点。谢谢,非常简单,如果使用createQueryBuilder(),它可以实现吗?如果要使用queryBuilder,有两种方法,在控制器中创建查询生成器或在存储库文件中创建方法,然后从控制器中调用它(是我推荐给你的,控制器不应该知道这个逻辑)如果我有两个字段-角色和令牌,并且我希望所有拥有角色自由职业者和令牌的用户都为空?哦,对不起,不为空,你不能在findBy中这样做,我将更新我的回答No find getResult我修复`$query=$qb->getQuery();$results=$query->getResult();`但是我在CustomUser类和class Developer类中的字段角色扩展了CustomUser,现在[语义错误]第0行,第53列“role=:role”附近:错误:Class Artel\ProfileBundle\Entity\Developer没有名为role的字段或关联
对不起,我的错误,请立即重试。您的字段名为roles而不是role,取消订阅Token而不是Token。您应该称它为role,它只是一个字符串,每个开发人员有一个rol,否则会造成混乱