laravel中的mergeBindings是啥意思
Posted
技术标签:
【中文标题】laravel中的mergeBindings是啥意思【英文标题】:what the meaning mergeBindings in laravellaravel中的mergeBindings是什么意思 【发布时间】:2016-03-12 20:40:50 【问题描述】:我是 laravel 4 的新手,我发现了这样的代码
$sub = Abc::where(..)->groupBy(..); // Eloquent Builder instance
$count = DB::table( DB::raw("($sub->toSql()) as sub") )
->mergeBindings($sub->getQuery())
->count();
我的问题是 1. mergeBindings($sub->getQuery()) 是什么意思,并举例说明如何使用mergeBindings
【问题讨论】:
他似乎在引用 this SO article 仅供参考。 @b4dQuetions 请记住,这是 2 年多的历史了,您是否解决了这个问题,或者您对此仍有疑问? 【参考方案1】:假设你的第一个查询是这样的:
$sub = Abc::where('type', 1)->groupBy(..);
那么当我们将其转换为sql时:
$sub->toSql();
这将返回类似这样的查询字符串:
SELECT * FROM abc where abc.type = ? GROUp BY ...
你可以看到“?”作为 PDO 执行查询字符串时将被绑定(替换为 1)的类型值
所以当我们在另一个查询中使用该子查询时,就像您在中所做的那样
$count = DB::table( DB::raw("($sub->toSql()) as sub") )
->mergeBindings($sub->getQuery())
->count();
您已将第一个子查询转换为 sql 字符串,但第二个查询对您的第一个子查询绑定一无所知,在此示例中值为 1
所以我们需要将第一个子查询的绑定合并到最后一个查询中
以便执行时的最后一个查询知道值1
并将其绑定到
where 子句替换“?”,您最终执行的查询将是这样的
(SELECT count(*) from abc where type = 1 GROUP BY ...) as sub
这就是mergeBindings()
方法的使用
我希望这能让你的问题清楚。
谢谢,
【讨论】:
以上是关于laravel中的mergeBindings是啥意思的主要内容,如果未能解决你的问题,请参考以下文章
the hash for the file is not present in the specified catalog file,是啥意