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

最佳答案

假设您的第一个查询是这样的:
$sub = Abc::where('type', 1)->groupBy(..);
然后,当我们将其转换为sql时:
$sub->toSql();
这将返回查询字符串,如下所示:
SELECT * FROM abc where abc.type = ? GROUp BY ...
你可以看到“?”作为PDO执行该查询字符串时将被绑定(bind)(替换为1)的类型值

因此,当我们像在

$count = DB::table( DB::raw("({$sub->toSql()}) as sub") )
    ->mergeBindings($sub->getQuery())
    ->count();

您已经将第一个子查询转换为sql字符串,但是第二个查询对您的第一个子查询绑定(bind)一无所知,在本示例中,该值是1
所以我们需要将第一个子查询的绑定(bind)合并到最后一个查询
这样,在执行最后一个查询时,它将知道1值并将其绑定(bind)到
替换“?”中的where子句,最终执行的查询将如下所示
(SELECT count(*) from abc where type = 1 GROUP BY ...) as sub
这就是mergeBindings()方法的使用

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

谢谢,

关于php - laravel中的mergeBindings是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34147224/

10-11 12:32