标签: query-builder

如何在Doctrine 2中使用WHERE IN

我有以下代码,它给我错误:

Message: Invalid parameter number: number of bound variables does not match number of tokens 
Run Code Online (Sandbox Code Playgroud)

码:

public function getCount($ids, $outcome)
{
    if (!is_array($ids)) {
        $ids = array($ids);
    }
    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb->add('select', $qb->expr()->count('r.id'))
       ->add('from', '\My\Entity\Rating r');
    if ($outcome === 'wins') { 
        $qb->add('where', $qb->expr()->in('r.winner', array('?1')));
    }
    if ($outcome === 'fails') {
        $qb->add('where', $qb->expr()->in('r.loser', array('?1')));
    }
    $qb->setParameter(1, $ids);
    $query = $qb->getQuery();
    //die('q = ' . $qb);
    return $query->getSingleScalarResult();
}
Run Code Online (Sandbox Code Playgroud)

数据(或$ ids):

Array
(
    [0] => 566
    [1] => 569
    [2] => 571 …
Run Code Online (Sandbox Code Playgroud)

php query-builder doctrine-orm

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

如何使用Laravel Query Builder从子查询中进行选择?

我想使用Eloquent ORM通过以下SQL获得价值.

- SQL

 SELECT COUNT(*) FROM 
 (SELECT * FROM abc GROUP BY col1) AS a;
Run Code Online (Sandbox Code Playgroud)

然后我考虑了以下内容.

- 代码

 $sql = Abc::from('abc AS a')->groupBy('col1')->toSql();
 $num = Abc::from(\DB::raw($sql))->count();
 print $num;
Run Code Online (Sandbox Code Playgroud)

我正在寻找更好的解决方案.

请告诉我最简单的解决方案.

sql query-builder laravel eloquent laravel-4

82
推荐指数
6
解决办法
11万
查看次数

如何使用symfony2 doctrine查询构建器选择不同的查询?

我有这个symfony代码,它检索与项目上的博客部分相关的所有类别:

$category = $catrep->createQueryBuilder('cc')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->getQuery();

$categories = $category->getResult();
Run Code Online (Sandbox Code Playgroud)

这有效,但查询包含重复项:

Test Content
Business
Test Content
Run Code Online (Sandbox Code Playgroud)

我想DISTINCT在我的查询中使用该命令.我见过的唯一例子要求我编写原始SQL.我想尽可能地避免这种情况,因为我试图保持所有代码相同,因此它们都使用Symfony2/Doctrine提供的QueryBuilder功能.

我尝试distinct()像这样添加到我的查询中:

$category = $catrep->createQueryBuilder('cc')
    ->Where('cc.contenttype = :type')
    ->setParameter('type', 'blogarticle')
    ->distinct('cc.categoryid')
    ->getQuery();

$categories = $category->getResult();
Run Code Online (Sandbox Code Playgroud)

但它会导致以下错误:

致命错误:调用未定义的方法Doctrine\ORM\QueryBuilder :: distinct()

如何告诉symfony选择distinct?

php query-builder symfony doctrine-orm

71
推荐指数
3
解决办法
11万
查看次数

Laravel 5.2 - pluck()方法返回数组

我正在尝试升级我的项目L5.1 - > L5.2.在升级指南中有一件事我不清楚:

" lists集合","查询"构建器和"Eloquent查询"构建器对象上的方法已重命名为pluck.方法签名保持不变.

没关系,重新命名refactoting lists()pluck()是没有问题.但是pluck()L5.0和L5.1中有用的方法是什么?

5.0文档:

从一行中检索单个列

$name = DB::table('users')->where('name', 'John')->pluck('name');
Run Code Online (Sandbox Code Playgroud)

pluck()L5.2中旧方法的替代方法是什么?

更新:

例:

var_dump(DB::table('users')->where('id', 1)->pluck('id'));
Run Code Online (Sandbox Code Playgroud)

L5.1:

// int(1)
Run Code Online (Sandbox Code Playgroud)

15.2:

// array(1) { [0]=> int(1) }
Run Code Online (Sandbox Code Playgroud)

php query-builder laravel eloquent laravel-5.2

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

在学说2中的日期之间选择条目

我会因为这个我没有得到解决的最小错误而疯狂.我想在两天之间选择条目,下面的例子说明了我所有的失败:

选择1.

$qb->where('e.fecha > ' . $monday->format('Y-m-d'));
$qb->andWhere('e.fecha < ' . $sunday->format('Y-m-d'));
Run Code Online (Sandbox Code Playgroud)

结果(0个条目):

SELECT r0_.id_reservacion AS id_reservacion0, r0_.fecha AS fecha1, r0_.cliente AS cliente2 
FROM reservacion r0_ 
WHERE (r0_.fecha > 2012 - 07 - 16) AND (r0_.fecha < 2012 - 07 - 22)
Run Code Online (Sandbox Code Playgroud)

选择2

$qb->add('where', 'e.fecha between 2012-01-01 and 2012-10-10');
Run Code Online (Sandbox Code Playgroud)

结果(0个条目):

SELECT r0_.id_reservacion AS id_reservacion0, r0_.fecha AS fecha1, r0_.cliente AS cliente2 
FROM reservacion r0_ WHERE r0_.fecha 
BETWEEN 2012 - 01 - 01 AND 2012 - 10 - 10
Run Code Online (Sandbox Code Playgroud)

这是我当前条目的表格:

id      fecha …
Run Code Online (Sandbox Code Playgroud)

php date between query-builder doctrine-orm

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

Laravel Query Builder其中max id

如何在Laravel 4.1 Query Builder中完成此操作?

select * from orders where id = (select max(`id`) from orders)
Run Code Online (Sandbox Code Playgroud)

我试过这个,工作但不能得到雄辩的功能.

DB::select(DB::raw('select * from orders where id = (select max(`id`) from orders)'));
Run Code Online (Sandbox Code Playgroud)

有什么想让它变得更好吗?

php query-builder laravel

39
推荐指数
5
解决办法
8万
查看次数

数据库查询构建器toArray()laravel 4

我正在尝试使用该方法将查询转换为数组,toArray()但它不适用于查询构建器.转换的任何想法吗?

DB::table('user')->where('name',=,'Jhon')->get()->toArray();
Run Code Online (Sandbox Code Playgroud)

query-builder laravel-4

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

Symfony2 QueryBuilder加入ON和WITH区别

我是Symfony2的新手,我通过QueryBuilder和Doctrine 2成功构建了我的第一个连接.可能这是一个愚蠢的问题但是在线和Symfony2的方法中我都无法找到任何理解join子句之间的区别的东西"用"和"开".

例如,这是我的加入代码:

->leftJoin('EcommerceProductBundle:ProductData', 'pdata', 'WITH', 'prod.id = IDENTITY(pdata.product)')
Run Code Online (Sandbox Code Playgroud)

它工作正常,但如果我把ON而不是WITH我得到以下错误:

[语法错误]第0行,第200行:错误:预期的Doctrine\ORM\Query\Lexer :: T_WITH,得到'ON'

为什么?我在对象中看到T_ON和T_WITH都有join子句,但是它们的使用区别是什么?他们的用途是什么样的?

left-join query-builder symfony doctrine-orm

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

Symfony 2:使用doctrine查询构建器在非相关表上进行INNER JOIN

我正在尝试使用doctrine查询构建器构建一个查询,该构建器连接一个非相关的表,如下所示:

$query = $this->createQueryBuilder('gpr')
        ->select('gpr, p')
        ->innerJoin('TPost', 'p')
        ->where('gpr.contentId = p.contentId')
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我仍然收到一个错误:

错误:标识变量TPost在连接路径表达式中使用但之前未定义.

我搜索了这个错误消息,每个人都回答使用表别名+属性,如p.someAttribute.但是我要加入的表格在表格中没有关系,我开始从中选择.

作为一个普通的mysql查询,我会这样写:

SELECT * FROM t_group_publication_rel gpr 
INNER JOIN t_post p 
WHERE gpr.content_id = p.content_id
Run Code Online (Sandbox Code Playgroud)

我有什么想法吗?

php mysql doctrine query-builder symfony

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

如何在ORM Symfony2中使用createQueryBuilder选择特定列?

我正在使用createQueryBuilder在Symfony2中构建查询.但是,我不想在这个实体中占用所有列.如何只选择ID和名称?

$query = $this->getEntityManager()->createQueryBuilder();
        $query
            ->select('d')
            ->from('AcmeBundle:Demo', 'd')
            ->leftjoin('d.otherEntity', 'o');

        $query->setMaxResults(10);
        $results = $query->getQuery()->getResult();
Run Code Online (Sandbox Code Playgroud)

非常感谢,

php orm query-builder symfony

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