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,是啥意

Laravel 中的闭包是啥?

Laravel 中的控制台路由是啥?它是如何工作的? [关闭]

Laravel 路由中的“as”关键字是啥意思?

WhereHas Laravel 中的关系计数条件是啥

java+p+=+new+JPanel(new+GridLayout(5,3,0,15));啥意?