【问题标题】: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 年多的历史了,您是否解决了这个问题,或者您对此仍有疑问?

标签: php mysql laravel


【解决方案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()方法的使用

我希望这能让你的问题清楚。

谢谢,

【讨论】:

    猜你喜欢
    • 2016-09-17
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2011-08-12
    • 2017-06-11
    • 2018-03-05
    • 2023-03-27
    • 2017-03-07
    相关资源
    最近更新 更多