Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php EEP为数组中查询的每个部分设置绑定变量: // Illuminate\Database\Query\Builder protected $bindings = array( 'select' => [], 'join' => [], 'where' => [], 'having' => [], 'order' => [], );_Php_Sql_Laravel_Fluent - Fatal编程技术网

Php EEP为数组中查询的每个部分设置绑定变量: // Illuminate\Database\Query\Builder protected $bindings = array( 'select' => [], 'join' => [], 'where' => [], 'having' => [], 'order' => [], );

Php EEP为数组中查询的每个部分设置绑定变量: // Illuminate\Database\Query\Builder protected $bindings = array( 'select' => [], 'join' => [], 'where' => [], 'having' => [], 'order' => [], );,php,sql,laravel,fluent,Php,Sql,Laravel,Fluent,这样,您就可以按照您喜欢的任何顺序构建查询—选择first、WHERE first或将其稍微混合。这对于单个查询来说非常好 然后,在构建联合时,Laravel所做的是将联合中每个查询中的这些数组合并在一起。这就是绑定变量混淆的地方。相反,它应该将每个查询的绑定变量数组解析为单个(线性)数组,然后按照连接联合查询的顺序连接这些数组 我把这当作一个错误提出来。我看不到一个简单的解决方法,所以我使用了一个变通方法:分别运行每个查询,然后在PHP中将结果合并在一起,而不是期望数据库将结果合并到联合查询中

这样,您就可以按照您喜欢的任何顺序构建查询—选择first、WHERE first或将其稍微混合。这对于单个查询来说非常好

然后,在构建联合时,Laravel所做的是将联合中每个查询中的这些数组合并在一起。这就是绑定变量混淆的地方。相反,它应该将每个查询的绑定变量数组解析为单个(线性)数组,然后按照连接联合查询的顺序连接这些数组

我把这当作一个错误提出来。我看不到一个简单的解决方法,所以我使用了一个变通方法:分别运行每个查询,然后在PHP中将结果合并在一起,而不是期望数据库将结果合并到联合查询中。其他解决方案,如手动将查询SQL和绑定连接在一起,并将它们直接传递给PDO,也可以,但我尽量不重写Laravel中的逻辑


我的建议是至少不要在Laravel4.2中使用联合体。如果您的查询没有任何绑定变量,那么您可以使用它。但是,请注意,查询生成器将为传递到查询任何部分的任何字符串、数字、日期、数字或数组使用绑定变量。

您需要在每个单独的联接回调中设置绑定,以使它们按正确的顺序排列:有说服力的绑定是一个真正的难题,特别是当您有连接、WHERE条件和have条件时,所有这些条件都有自己的bindingsFluent将绑定放在正确的位置,但只是打乱了绑定数据的顺序。上面的代码(IMO)中有足够的结构使其正确,所以我倾向于使用Fluent。当您说“设置绑定”时,您的意思是不让fluent处理它,而是在需要的地方插入原始SQL?这可能会解决我的问题,特别是因为我绑定的是固定字符串和数字,而不是用户输入。这只是流畅的(查询生成器),而不是雄辩的(ORM)。我正在从许多参数构建复杂的查询,并直接针对远程应用程序(SugarCRM数据库)运行这些查询。合并联合时,查询生成器使用
mergeBindings()
合并第一个和第二个查询的绑定。这将分离出两个查询的WHERE绑定并将它们放在一起,然后将它们标记到绑定数组的末尾。没有联合就可以了,因为where是非联合查询中唯一的where子句。但是在多个查询中合并多个WHERE子句的绑定必然会以错误的顺序得到它们-这只是做了错误的事情。我当前的解决方法是将联合中的每个查询作为单独的查询执行,然后在PHP中合并结果。您需要在每个单独的联接回调中设置绑定,以使它们按正确的顺序排列:雄辩的绑定是一个真正的难题,特别是当您有联接、WHERE-criteria和have-criteria时,它们都有自己的绑定Fluent将绑定放在正确的位置,但这只是打乱了绑定数据的顺序。上面的代码(IMO)中有足够的结构使其正确,所以我倾向于使用Fluent。当您说“设置绑定”时,您的意思是不让fluent处理它,而是在需要的地方插入原始SQL?这可能会解决我的问题,特别是因为我绑定的是固定字符串和数字,而不是用户输入。这只是流畅的(查询生成器),而不是雄辩的(ORM)。我正在从许多参数构建复杂的查询,并直接针对远程应用程序(SugarCRM数据库)运行这些查询。合并联合时,查询生成器使用
mergeBindings()
合并第一个和第二个查询的绑定。这将分离出两个查询的WHERE绑定并将它们放在一起,然后将它们标记到绑定数组的末尾。没有联合就可以了,因为where是非联合查询中唯一的where子句。但是在多个查询中合并多个WHERE子句的绑定必然会以错误的顺序得到它们-这只是做了错误的事情。我当前的解决方法是将联合中的每个查询作为单独的查询执行,然后在PHP中合并结果。您需要在每个单独的联接回调中设置绑定,以使它们按正确的顺序排列:雄辩的绑定是一个真正的难题,特别是当您有联接、WHERE-criteria和have-criteria时,它们都有自己的绑定Fluent将绑定放在正确的位置,但这只是打乱了绑定数据的顺序。上面的代码(IMO)中有足够的结构使其正确,所以我倾向于使用Fluent。当您说“设置绑定”时,您的意思是不让fluent处理它,而是在需要的地方插入原始SQL?这可能会解决我的问题,特别是因为我绑定的是固定字符串和数字,而不是用户输入。这只是流畅的(查询生成器),而不是雄辩的(ORM)。我正在从许多参数构建复杂的查询,并直接针对远程应用程序(SugarCRM数据库)运行这些查询。合并联合时,查询生成器使用
mergeBindings()
合并第一个和第二个查询的绑定。这将分离出两个查询的WHERE绑定并将它们放在一起,然后将它们标记到绑定数组的末尾。没有联合就可以了,因为where是非联合查询中唯一的where子句。但是在多个查询中合并多个WHERE子句的绑定必然会以错误的顺序得到它们-这只是做了错误的事情。我当前的解决方法是将联合中的每个查询作为单独的查询执行,然后在PHP中合并结果。您需要设置bindin
(select * from `x` inner join `y` on `y`.`id` = ?)
union all
(select * from `c` where `d` = ?)
union all
(select * from `e` inner join `f` on `f`.`id` = ?)

array(3) {
  [0]=>
  string(2) "first"
  [1]=>
  string(2) "third"
  [2]=>
  string(2) "second"
}
// Illuminate\Database\Query\Builder
protected $bindings = array(
    'select' => [],
    'join'   => [],
    'where'  => [],
    'having' => [],
    'order'  => [],
);