标签: dql

SQL 如何查询多对多关系

如果帖子和标签之间存在多对多关系,我该如何选择包含特定标签的帖子?

更新:

我遇到的问题是,由于 where tag.name = 'xxx',只选择了那个标签。我想要的是选择所有指定了标签的帖子,tgt 及其所有标签,例如。

Post 1 -> tag1, tag2
Post 2 -> tag1, tag3
Post 3 -> tag2, tag3
Run Code Online (Sandbox Code Playgroud)

目前我得到的是

Post 1 -> tag2 // missing tag1
Post 3 -> tag2 // missing tag3 
Run Code Online (Sandbox Code Playgroud)

doctrine dql

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

Doctrine不会让我选择特定的字段

symfony框架具有app/console文件,可以通过php执行以执行一些维护任务.它还允许用户运行DQL查询:

# php app/console doctrine:query:dql --hydrate=array \
    'SELECT u.id, u.nameFirst, u.nameLast  FROM DatabaseBundle:User u'  
array
  0 => 
    array
      'id' => string '1' (length=1)
      'nameFirst' => string 'jaroslav' (length=8)
      'nameLast' => string 'rakhmatoullin' (length=13)
  1 => 
    array
      'id' => string '2' (length=1)
      'nameFirst' => string 'Båb Kåre' (length=10)
      'nameLast' => string 'Ytrefoss' (length=8)
Run Code Online (Sandbox Code Playgroud)

观察我选择了三个特定的列.我遇到的问题是,当两个表连接时,类似的查询会给我一个错误.

# php app/console doctrine:query:dql  --hydrate=array \
    'SELECT u.id , r FROM DatabaseBundle:User u JOIN u.roles r'

  [Doctrine\ORM\Query\QueryException]                   
  [Semantical Error] line 0, col -1 near 'SELECT u.id ,': …
Run Code Online (Sandbox Code Playgroud)

dql symfony doctrine-orm

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

在Symfony2和Doctrine中的DateTime字段中按时间搜索

我使用Symfony 2和Doctrine.在我的数据库MySQL中,我有一个类型的字段DateTime.在我的Repository文件中,通过使用QueryBuilder,我想在我的Where子句中仅按日期(没有时间)和仅按时间(没有日期)搜索此表.

我怎么能意识到这一点?

mysql datetime dql symfony doctrine-orm

10
推荐指数
1
解决办法
7536
查看次数

在Count中的Doctrine 2 DQL案例

我在本机MySQL代码中有这个查询

SELECT *
FROM `turn`
LEFT JOIN (
    poi
) ON ( turn.id = poi.turn_id )
GROUP BY turn.id
ORDER BY count( case when poi.image = 1 then 1 else null end) DESC;
Run Code Online (Sandbox Code Playgroud)

我需要在Doctrine 2 DQL中重建它

到目前为止我的尝试是这样的:

SELECT t, COUNT((CASE WHEN Bundle\Entity\Poi p.image = 1 then 1 ELSE NULL END)) AS num
FROM Bundle\Entity\Turn t
JOIN t.pois p
GROUP BY t.id
ORDER BY num DESC
Run Code Online (Sandbox Code Playgroud)

我得到这个错误:

An exception has been thrown during the rendering of a template ("[Syntax Error] line …

mysql dql symfony doctrine-orm

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

按原则分组使用月份,年份2

如何在doctrine2中将以下SQL查询编写为DQL.

SELECT COUNT(id)  
FROM stats  
WHERE YEAR(record_date) = 2009  
GROUP BY YEAR(record_date), MONTH(record_date)
Run Code Online (Sandbox Code Playgroud)

即我希望group by结果基于存储在MySQL表中的月份,日期时间字段的年份.

doctrine dql

9
推荐指数
1
解决办法
9897
查看次数

实体字段类型中的自定义查询

我用这样的实体类型构建一个表单:

$form = $this->createFormBuilder()
->add('users', 'entity', array(
    'class' => 'UserBundle:Users',
        'query_builder' => function(EntityRepository $er) {
            return $er->createQueryBuilder('u')
                          ->orderBy('u.name', 'ASC');
                        },)
      )
->getForm();
Run Code Online (Sandbox Code Playgroud)

现在我想修改此表单,仅显示不同的用户.我试试这个:

->add('users', 'entity', array(
                        'class' => 'UserBundle:Users',
                        'query_builder' => function(EntityRepository $er) {
                        return $er->createQuery('SELECT DISTINCT u.name FROM UserBundle:Users ORDER BY u.name ASC')->getResult();
                        },)
                      )
Run Code Online (Sandbox Code Playgroud)

但是Symfony给了我一个例外.我的问题是如何在实体字段类型中使用自定义查询?


我不明白你的意思是什么意思.我的代码看起来像:

库:

public function getDistinctUsers()
{
    return $this->getEntityManager()->createQuery('SELECT DISTINCT u.name FROM UserBundle:Users u ORDER BY u.name DESC')->getResult();
}
Run Code Online (Sandbox Code Playgroud)

控制器:

->add('users', 'entity', array(
    'class' => 'UserBundle:Users',
    'query_builder' => function(EntityRepository $er) {
            return $er->getDistinctUsers();
         },) …
Run Code Online (Sandbox Code Playgroud)

entity dql symfony

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

未定义dql查询错误类

试图将我的SQL查询转换为dql,似乎我做错了.

我需要基本的连接,就像这样.

SELECT a.id, a.title, u.name FROM articles JOIN users ON a.author_id = u.id
Run Code Online (Sandbox Code Playgroud)

试着

SELECT a.id, a.title, u.name FROM Article a JOIN User u WITH a.author_id = u.id
Run Code Online (Sandbox Code Playgroud)

得到错误

[Semantical Error] line 0, col 34 near 'Article a JOIN': Error: Class 'Article' is not defined.
Run Code Online (Sandbox Code Playgroud)

我该如何定义?你能给我一个正确的解决方案吗?

编辑:

文章实体

<?php

namespace AppBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="articles")
 */
class Article
{
    /**
     * @var integer $id
     *
     * @ORM\Id
     * @ORM\Column(name="id", type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected …
Run Code Online (Sandbox Code Playgroud)

doctrine dql symfony

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

Doctrine2 Multiple Join适用于createQuery,但不适用于queryBuilder

如果我在没有queryBuilder的情况下使用这个dql进行查询

$query = $this->_em
  ->createQuery("SELECT p, g, c
            FROM LikeYeah\GoBundle\Entity\Product p
            JOIN p.garments g
            LEFT JOIN g.colours c
            ORDER BY p.id DESC
          ");
Run Code Online (Sandbox Code Playgroud)

一切都很好,但如果我使用(我相信是相同的)查询槽查询生成器这样

 $qb->select('p, g, c')
    ->from('LikeYeah\GoBundle\Entity\Product', 'p')
    ->join('p.garments', 'g')
    ->leftJoin('g.colours', 'c')
    ->orderBy('p.id', 'desc');
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

"语义错误"第0行,第66行靠近'.colours c,LikeYeah\GoBundle\Entity\Product':错误:识别变量g用于连接路径表达式,但之前没有定义过."

我错过了什么?

php dql symfony doctrine-orm

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

如何批量删除Doctrine 2中ManyToMany关系中的实体?

说我有以下课程:

class Store
{
    /**
     * @ManyToMany(targetEntity="PaymentMethod")
     */
    protected $paymentMethods;
}

class PaymentMethod
{
}
Run Code Online (Sandbox Code Playgroud)

当我们删除(或只是禁用,而不是实际从数据库中删除)a时PaymentMethod,我们希望paymentMethod从所有Store::$paymentMethods集合中删除它.

到目前为止,我们一直在联结表上使用原始SQL查询:

DELETE FROM StorePaymentMethod WHERE paymentMethodId = ?
Run Code Online (Sandbox Code Playgroud)

有没有办法在Doctrine中做到这一点,最好是在DQL中?

php many-to-many dql doctrine-orm

8
推荐指数
1
解决办法
1388
查看次数

如何在Doctrine查询语言(dql)中获取日期差异?

我有一个名为Auction的实体,其中包含两个datetime类型的字段:date1和date2.我想选择所有拍卖行,其中date1和date2之间的差异小于30分钟.如何使用Doctrine查询语言执行此操作?

DATE_DIFF(date1,date2)作为文档说明"计算date1-date2之间的天数差异".我需要差异的地方.

编辑:所以这里是自定义函数TIME_DIFF的完整实现:

use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;

/**
 * Custom DQL function returning the difference between two DateTime values
 * 
 * usage TIME_DIFF(dateTime1, dateTime2)
 */
class TimeDiff extends FunctionNode
{
    /**
     * @var string
     */
    public $dateTime1;

    /**
     * @var string
     */
    public $dateTime2;

    public function parse(\Doctrine\ORM\Query\Parser $parser)
    {
        $parser->match(Lexer::T_IDENTIFIER);
        $parser->match(Lexer::T_OPEN_PARENTHESIS);
        $this->dateTime1 = $parser->ArithmeticPrimary();       
        $parser->match(Lexer::T_COMMA);
        $this->dateTime2 = $parser->ArithmeticPrimary();
        $parser->match(Lexer::T_CLOSE_PARENTHESIS);
    }

    public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
    {
        return 'TIME_TO_SEC(TIMEDIFF(' .
            $this->dateTime1->dispatch($sqlWalker) . ', ' . …
Run Code Online (Sandbox Code Playgroud)

datetime doctrine date dql symfony

8
推荐指数
1
解决办法
7635
查看次数

标签 统计

dql ×10

symfony ×7

doctrine-orm ×5

doctrine ×4

datetime ×2

mysql ×2

php ×2

date ×1

entity ×1

many-to-many ×1