当前位置:  开发笔记 > 编程语言 > 正文

Laravel中的mergeBindings是什么意思

如何解决《Laravel中的mergeBindings是什么意思》经验,为你挑选了1个好方法。

嗨,我是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



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()方法的使用

我希望这可以使您的问题更清楚。

谢谢,

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有