我有以下代码,它给我错误:
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) 我想使用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)
我正在寻找更好的解决方案.
请告诉我最简单的解决方案.
我有这个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?
我正在尝试升级我的项目L5.1 - > L5.2.在升级指南中有一件事我不清楚:
"
lists集合","查询"构建器和"Eloquent查询"构建器对象上的方法已重命名为pluck.方法签名保持不变.
没关系,重新命名refactoting lists()到pluck()是没有问题.但是pluck()L5.0和L5.1中有用的方法是什么?
从5.0文档:
从一行中检索单个列
Run Code Online (Sandbox Code Playgroud)$name = DB::table('users')->where('name', 'John')->pluck('name');
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) 我会因为这个我没有得到解决的最小错误而疯狂.我想在两天之间选择条目,下面的例子说明了我所有的失败:
选择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) 如何在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)
有什么想让它变得更好吗?
我正在尝试使用该方法将查询转换为数组,toArray()但它不适用于查询构建器.转换的任何想法吗?
例
DB::table('user')->where('name',=,'Jhon')->get()->toArray();
Run Code Online (Sandbox Code Playgroud) 我是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子句,但是它们的使用区别是什么?他们的用途是什么样的?
我正在尝试使用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)
我有什么想法吗?
我正在使用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)
非常感谢,
query-builder ×10
php ×7
doctrine-orm ×4
symfony ×4
laravel ×3
eloquent ×2
laravel-4 ×2
between ×1
date ×1
doctrine ×1
laravel-5.2 ×1
left-join ×1
mysql ×1
orm ×1
sql ×1