Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在doctrine2中查找实体_Php_Mysql_Symfony_Doctrine Orm - Fatal编程技术网

Php 如何在doctrine2中查找实体

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您不能这样做,如果标记只有一个,您可以这样做,如果它是一个数组,您不能这样做 一个解决方案可以是执行查

我有一个实体开发者,他有字段角色、$unsubscribeDate、$tags,我需要找到他: -拥有自由职业者的角色, -取消订阅日期<现在日期 -标记not=:黑名单,unsubscribed(inDB a:2:{i:0;s:12:“unsubscribed”;i:1;s:9:“黑名单”;})或标记have=a:0:{}

我怎么做我不知道,请帮帮我 这个实体

/**
* 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和unsubscribeDate
public 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)')