标签: doctrine-query

现场有下划线的Magic Doctrine2发现者?

find*()当字段之间有下划线时,我在使用Doctrine2的魔术方法时遇到问题.

$repository->findByName("Hello"); // Works
$repository->findByIsEnabled(true);
Run Code Online (Sandbox Code Playgroud)

实体'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
Run Code Online (Sandbox Code Playgroud)

doctrine doctrine-query symfony doctrine-orm

5
推荐指数
1
解决办法
6698
查看次数

带有ids的数组的doctrine2顺序

如何通过带有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);
Run Code Online (Sandbox Code Playgroud)

我希望结果与带有id的数组具有相同的顺序,是否可以这样做?

谢谢

解:

使用FIELD mysql扩展与https://github.com/beberlei/DoctrineExtensions

:)

谢谢

doctrine-query symfony doctrine-orm doctrine-odm

5
推荐指数
2
解决办法
2767
查看次数

Doctrine Query Builder其中ManyToMany的计数大于

我正在使用Doctrine查询生成器,并且有一个非常具体的要求.

我在我的实体中使用ManyToMany字段,与用户实体关联(用户帐户实体数组)相关.

/**
 * @var ArrayCollection
 *
 * @ORM\ManyToMany(targetEntity="User", cascade={"persist"})
 * @ORM\JoinTable(name="post_user_list")
 */
protected $userList;
Run Code Online (Sandbox Code Playgroud)

在显示"公共帖子"的要求中,要求实体具有已发布的布尔值设置为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'));
Run Code Online (Sandbox Code Playgroud)

并且只处理前两个要求,现在我需要一个条件条目来计算userList中的用户实体数量,而where子句专门用于大于或等于两个用户.

不完全确定在哪里继续..

doctrine many-to-many doctrine-query symfony doctrine-orm

4
推荐指数
1
解决办法
1万
查看次数

错误:无效的路径表达式。必须是 StateFieldPathExpression。

我正在使用 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);
}
Run Code Online (Sandbox Code Playgroud)

我认为错误在于, …

doctrine doctrine-query symfony

4
推荐指数
1
解决办法
1万
查看次数

如何在findAll()中获取数组结果 - Doctrine?

我需要findAll()在Doctrine中使用Array获取数据库中的所有记录,My Query就是这样的东西

$result = $this->getDoctrine()
                ->getRepository('CoreBundle:Categories')
                ->findAll(\Doctrine\ORM\Query::HYDRATE_ARRAY);
Run Code Online (Sandbox Code Playgroud)

即使将水化模式设置为HYDRATE_ARRAY,我也会将结果作为对象

array:4 [?
0 => Categories {#323 ?}
1 => Categories {#326 ?}
2 => Categories {#329 ?}
3 => Categories {#332 ?}
]
Run Code Online (Sandbox Code Playgroud)

我犯了什么错误?

doctrine-query symfony doctrine-orm

4
推荐指数
2
解决办法
2万
查看次数

Doctrine2 fetch Count 更优化更快的方式 或者 Zf2 库

我正在使用Doctrine2 and Zf2,现在当我需要获取count行时,我有以下两种获取它的方法。但我担心的是哪种方式会更优化和更快,因为将来行数将超过 50k。任何建议或任何其他方式来获取计数?是否有任何函数可以用于获取计数findBy

或者我应该使用普通的 Zf2 数据库库来获取计数。我刚刚发现当数据很大时,ORM 不适合获取结果。请任何帮助将不胜感激

$members = $this->getEntityManager()->getRepository('User\Entity\Members')->findBy(array('id' => $id, 'status' => '1'));
$membersCnt = sizeof($members);
Run Code Online (Sandbox Code Playgroud)

或者

$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();
Run Code Online (Sandbox Code Playgroud)

orm doctrine doctrine-query doctrine-orm zend-framework2

3
推荐指数
1
解决办法
2871
查看次数

symfony2 createQueryBuilder

我试图从存储库类中创建一个非常简单的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")
     */ …
Run Code Online (Sandbox Code Playgroud)

doctrine-query symfony

3
推荐指数
1
解决办法
2万
查看次数

可以在没有where()的情况下使用Doctrine QueryBuilder和Where()吗?

在Doctrine中,使用QueryBuilder构建查询时,是否where必须使用$qb->where()$qb->andWhere()直接使用第一个子句定义.例如,这是否有效:

$qb->select('Mystuff\Entity\User','u');
$qb->andWhere('usertype = :usertype');
$qb->andWhere('usercategory = :usercategory');
Run Code Online (Sandbox Code Playgroud)

或者,作为一个更相关的例子:

$filter = array('usertype'=>'basic','usercategory'=>'business');
$qb->select('Mystuff\Entity\User','u');
foreach ($filter as $fkey => $fval) {
   $qb->andWhere($fkey.' = :'.$fval);
}
Run Code Online (Sandbox Code Playgroud)

doctrine query-builder doctrine-query

2
推荐指数
1
解决办法
1226
查看次数

Symfony 2,QueryBuilder,多个和具有相同参数的地方

我有两个实体 - 律师和类别.它们与多对多关联.假设示例律师有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 …
Run Code Online (Sandbox Code Playgroud)

php doctrine-query symfony doctrine-orm

2
推荐指数
1
解决办法
3942
查看次数

Symfony /主义错误:“未定义类'FROM'。” 在getResult()上

我正在开发我的第一个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();
Run Code Online (Sandbox Code Playgroud)

如果我使用调试器查看$ 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 …
Run Code Online (Sandbox Code Playgroud)

doctrine doctrine-query symfony symfony-3.2

2
推荐指数
1
解决办法
4042
查看次数