find*()当字段之间有下划线时,我在使用Doctrine2的魔术方法时遇到问题.
$repository->findByName("Hello"); // Works
$repository->findByIsEnabled(true);
实体'Acme\SecurityBundle\Entity\Package'没有字段'isEnabled'.因此,您不能在实体的存储库中调用"findByIsEnabled".
这是YAML中用于复制错误的简单实体定义:
Acme\SecurityBundle\Entity\Package:
  type: entity
  repositoryClass: Acme\SecurityBundle\Repository\PackageRepository
  table: security_package
  id:
    id:
      type: integer
      generator: { strategy: AUTO }
  fields:
    name:
      type: string
      length: 255
      unique: true
    is_enabled:
      type: boolean
如何通过带有id的数组使用doctrine2命令?
我有这个问题:
$qb = $this->createQueryBuilder('u')
        ->select('u', 'n', 'c')
        ->leftJoin('u.notifications', 'n')
        ->leftJoin('u.channel', 'c')
        ->andWhere('u.id IN (:ids)')
        ->setParameter('ids', $ids);
我希望结果与带有id的数组具有相同的顺序,是否可以这样做?
谢谢
解:
使用FIELD mysql扩展与https://github.com/beberlei/DoctrineExtensions
:)
谢谢
我正在使用Doctrine查询生成器,并且有一个非常具体的要求.
我在我的实体中使用ManyToMany字段,与用户实体关联(用户帐户实体数组)相关.
/**
 * @var ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="User", cascade={"persist"})
 * @ORM\JoinTable(name="post_user_list")
 */
protected $userList;
在显示"公共帖子"的要求中,要求实体具有已发布的布尔值设置为true,发布日期小于当前日期,以及两个与实体关联的用户.
在我的查询构建器中,我设置了这个:
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select($select)->from($this->getEntityName(), 'p');
$criteria = $qb->expr()->andX();
$criteria->add($qb->expr()->eq('p.editor_published', 1))
         ->add($qb->expr()->lte('p.datePublished', ':now'));
并且只处理前两个要求,现在我需要一个条件条目来计算userList中的用户实体数量,而where子句专门用于大于或等于两个用户.
不完全确定在哪里继续..
我正在使用 query builder处理一个symfony 项目实体。当我尝试运行此功能时,出现此问题。
[语义错误] 'category FROM' 附近的第 0 行第 9 列:错误:无效的 PathExpression。必须是 StateFieldPathExpression。
public function json_filterAllproductsAction() {
    $search = "";
    $category = 1;
    //Combine tables and create the query with querybuilder
    $em = $this->container->get('doctrine.orm.entity_manager');
    $qb = $em->createQueryBuilder();
    $qb->select('p.category')
            ->from('EagleAdminBundle:Products', 'p')
            ->orderBy('p.id', 'DESC');
    if ($category != 0) {
        $qb->andWhere('p.category = :category')
                ->setParameter('category', $category);
    }
    $qb->andWhere('p.productTitle LIKE :title')
            ->setParameter('title', "$search%");
    //convert to json using "JMSSerializerBundle"
    $serializer = $this->container->get('serializer');
    $jsonproducts = $serializer->serialize($qb->getQuery()->getResult(), 'json');
    return new Response($jsonproducts);
}
我认为错误在于, …
我需要findAll()在Doctrine中使用Array获取数据库中的所有记录,My Query就是这样的东西
$result = $this->getDoctrine()
                ->getRepository('CoreBundle:Categories')
                ->findAll(\Doctrine\ORM\Query::HYDRATE_ARRAY);
即使将水化模式设置为HYDRATE_ARRAY,我也会将结果作为对象
array:4 [?
0 => Categories {#323 ?}
1 => Categories {#326 ?}
2 => Categories {#329 ?}
3 => Categories {#332 ?}
]
我犯了什么错误?
我正在使用Doctrine2 and Zf2,现在当我需要获取count行时,我有以下两种获取它的方法。但我担心的是哪种方式会更优化和更快,因为将来行数将超过 50k。任何建议或任何其他方式来获取计数?是否有任何函数可以用于获取计数findBy?
或者我应该使用普通的 Zf2 数据库库来获取计数。我刚刚发现当数据很大时,ORM 不适合获取结果。请任何帮助将不胜感激
$members = $this->getEntityManager()->getRepository('User\Entity\Members')->findBy(array('id' => $id, 'status' => '1'));
$membersCnt = sizeof($members);
或者
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('count(p)')
   ->from('User\Entity\Members', 'p')
   ->where('p.id = '.$id)
   ->andWhere('p.status = 1');
$membersCnt = $qb->getQuery()->getSingleScalarResult();
我试图从存储库类中创建一个非常简单的SQL查询,只需select * from Adjudicacion where cursoAcademico_id=$cursoAcademicoActual;:
这是我的实体:
/**
* Adjudicacion
*
* @ORM\Table(name="Adjudicacion")
* @ORM\Entity(repositoryClass="Administrador\AdjudicacionBundle\Entity\AdjudicacionRepository")
*/
class Adjudicacion {
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="fechaInicio", type="date")
     */
    private $fechaInicio;
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="fechaFinal", type="date")
     */
    private $fechaFinal;
    /**
     * @ORM\ManyToOne(targetEntity="Administrador\CursoAcademicoBundle\Entity\CursoAcademico")
     */
    private $cursoAcademico;
    /**
     * @ORM\ManyToOne(targetEntity="Administrador\AdjudicacionClaseBundle\Entity\AdjudicacionClase")
     */
    private $adjudicacionClase;
    /**
     * @ORM\ManyToOne(targetEntity="Administrador\AdjudicacionNumeroBundle\Entity\AdjudicacionNumero")
     */
    private $adjudicacionNumero;
    /**
     * @ORM\ManyToOne(targetEntity="Administrador\AdjudicacionTipoBundle\Entity\AdjudicacionTipo")
     */ …在Doctrine中,使用QueryBuilder构建查询时,是否where必须使用$qb->where()或$qb->andWhere()直接使用第一个子句定义.例如,这是否有效:
$qb->select('Mystuff\Entity\User','u');
$qb->andWhere('usertype = :usertype');
$qb->andWhere('usercategory = :usercategory');
或者,作为一个更相关的例子:
$filter = array('usertype'=>'basic','usercategory'=>'business');
$qb->select('Mystuff\Entity\User','u');
foreach ($filter as $fkey => $fval) {
   $qb->andWhere($fkey.' = :'.$fval);
}
我有两个实体 - 律师和类别.它们与多对多关联.假设示例律师有3个类别.我想通过一系列类别来创建搜索律师的功能,并且它应该只返回拥有阵列所有类别的律师.
class Lawyer {
    //...
    /**
     * @ORM\ManyToMany(targetEntity="Dees\KancelariaBundle\Entity\Category")
     * @ORM\JoinTable(name="lawyers_has_categories",
     *      joinColumns={@ORM\JoinColumn(name="lawyer_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")}
     * )
     *
     * @var ArrayCollection
     */
    protected $categories = null;   
    //...
}
class Category {
    //...
    /**
     * @ORM\Column(length=255, nullable=true)
     *
     * @var string
     */
    protected $name;    
    //...   
}
public function searchLawyers(array $categories) {
    $queryBuilder = $this->createQueryBuilder('lawyer')
            ->join('lawyer.categories', 'category');
    $queryBuilder->andWhere("category.name = :category1");
    $queryBuilder->setParameter("category1", "First category");     
    $queryBuilder->andWhere("category.name = :category2");
    $queryBuilder->setParameter("category2", "Second category");
    //...       
    //won't work, return null, but lawyer with these categories …我正在开发我的第一个symfony应用程序,同时尝试使用queryBuilder时,我已经为这个问题苦苦挣扎了几个小时。
我正在尝试执行SQL查询,但出现以下错误:
request.CRITICAL:未捕获的PHP异常Doctrine \ ORM \ Query \ QueryException:“ [语义错误]第0行,'FROM StatsBundle \ Entity \ PlayerRealMatch'附近的第288行:错误:未定义类'FROM'。”
基本上,我存储的是足球运动员的评分和目标,现在我想检索这些值的总和和平均值。
我在服务中,并且在PlayerRealMatchRepository中调用一个方法,该方法的核心代码如下:
        $qb = $this->createQueryBuilder('prm');
        $qb->select(
            "SUM(prm.has_started) as tit,
            SUM(prm.has_entered) as rempl,
            SUM(prm.yellow_cards) as yc,
            SUM(prm.red_card) as rc,
            SUM(prm.goals) AS gf,
            SUM(prm.own_goals) as ga,
            AVG(prm.rating) as avg"
        )
            ->innerJoin('prm.realMatch', 'rm')
            ->where('prm.playerId = :idPlayer')
            ->groupBy('rm.season')
            ->setParameter('idPlayer', $player->getId())
            ->getQuery();
        $query =$qb->getQuery();
        $seasonData = $query->getResult();
如果我使用调试器查看$ query对象的_dql属性,则将具有以下内容:
SELECT SUM(prm.has_started) as tit,
                SUM(prm.has_entered) as rempl,
                SUM(prm.yellow_cards) as yc,
                SUM(prm.red_card) as rc,
                SUM(prm.goals) AS gf,
                SUM(prm.own_goals) as ga,
                AVG(prm.rating) as …doctrine-query ×10
symfony ×8
doctrine ×6
doctrine-orm ×6
doctrine-odm ×1
many-to-many ×1
orm ×1
php ×1
symfony-3.2 ×1