Php 如何在doctrine2中查找实体
我有一个实体开发者,他有字段角色、$unsubscribeDate、$tags,我需要找到他: -拥有自由职业者的角色, -取消订阅日期<现在日期 -标记not=:黑名单,unsubscribed(inDB a:2:{i:0;s:12:“unsubscribed”;i:1;s:9:“黑名单”;})或标记have=a:0:{} 我怎么做我不知道,请帮帮我 这个实体Php 如何在doctrine2中查找实体,php,mysql,symfony,doctrine-orm,Php,Mysql,Symfony,Doctrine Orm,我有一个实体开发者,他有字段角色、$unsubscribeDate、$tags,我需要找到他: -拥有自由职业者的角色, -取消订阅日期createQueryBuilder('d'); $qb ->选择('d') ->from('ArtelProfileBundle:Developer','d') ->其中('d.roles=:role') ->而where('d.unsubscribeDate您不能这样做,如果标记只有一个,您可以这样做,如果它是一个数组,您不能这样做 一个解决方案可以是执行查
/**
* Developers
*
* @ORM\Table(name="developers")
* @ORM\Entity(repositoryClass="Artel\ProfileBundle\Entity\DeveloperRepository")
*/
class Developer extends CustomUser
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var \DateTime
* @ORM\Column(name="unsubscribe_date", type="date")
*/
protected $unsubscribeDate;
/**
* @var string
*
* @ORM\Column(name="tags", type="array", nullable=true)
*/
private $tags = array();
/**
* @var string
*
* @ORM\Column(name="role", type="string", length=25, nullable=true)
*/
protected $roles;
例如kike,找到拥有$role和unsubscribeDatepublic function getWhoNotSendEmail($role, $tags)
{
$date = new \DateTime;
$qb = $this->getEntityManager()->createQueryBuilder('d');
$qb
->select('d')
->from('ArtelProfileBundle:Developer', 'd')
->where('d.roles = :role')
->andWhere('d.unsubscribeDate <= :departureDate')
->setParameter('departureDate', $date)
->setParameter('role', $role)
->getQuery();
$query = $qb->getQuery();
$results = $query->getResult();
$arrayResults = array();
foreach ($results as $result) {
if (is_array($result->getTags())) {
if (count(array_diff($result->getTags(), $tags)) > 0) {
$arrayResults[] = $result;
}
}
}
return $arrayResults;
}
公共函数getWhoNotSendEmail($role,$tags)
{
$date=new\DateTime;
$qb=$this->getEntityManager()->createQueryBuilder('d');
$qb
->选择('d')
->from('ArtelProfileBundle:Developer','d')
->其中('d.roles=:role')
->而where('d.unsubscribeDate您不能这样做,如果标记只有一个,您可以这样做,如果它是一个数组,您不能这样做
一个解决方案可以是执行查询,从标记中获取所有值,然后,如果array_diff>0意味着您保留此开发人员
public function getWhoSendEmail($role, $bl)
{
$date = new \DateTime;
$qb = $this->getEntityManager()->createQueryBuilder('d');
$qb
->select('d')
->from('ArtelProfileBundle:Developer', 'd')
->where('d.roles = :role')
->andWhere('d.unsubscribeDate <= :departureDate')
->setParameter('role', $role)
->setParameter('departureDate', $date)
->getQuery()
;
$query = $qb->getQuery();
$results = $query->getResult();
$arrayResults = array();
foreach ($results as $result) {
$arrayTags = explode(",", $result->getTags());
if (count(array_diff($arrayTags, $b1)) > 0) {
$arrayResults[] = $result;
}
}
return $arrayResults;
}
但事实并非如此。$role这个变量在行动中是如何变化的$bl=[黑名单,取消订阅]现在去聊天吧,聊天室在有很多评论时打开,而不是在开发者有a:2:{i:0;s:12:“取消订阅”;i:1;s:9:“黑名单”}和在我的行动中如何写对$bl?$bl=['blacklist',unsubscribed'];$dev_tag=$em->getRepository('ArtelProfileBundle:Developer')->getWhoSendEmail($role,$bl);开发者的归档标记这是一个数组,例如在DB a:2:{i:0;s:12:“取消订阅”;i:1;s:9:“黑名单”}我在finction getWhoSendEmail中发布的内容是可变的$bl,我需要找到没有标签的开发者黑名单和取消订阅。我想标签就是其中之一,现在检查一下
->andWhere('d.tag NOT IN (:tags)')