Php 分配查询时发生Laravel union 500错误
所以我有以下代码Php 分配查询时发生Laravel union 500错误,php,laravel,Php,Laravel,所以我有以下代码 $query = DB::table('recipes'); // USING ONE OF THE FF STATEMENTS CHANGES THE OUTPUT $second = DB::table('recipes'); // WORKS $second = $query; // BREAKS AND RETURNS 500 ERROR $query->where('status', 0); $query->where('type', 'x'); $
$query = DB::table('recipes');
// USING ONE OF THE FF STATEMENTS CHANGES THE OUTPUT
$second = DB::table('recipes'); // WORKS
$second = $query; // BREAKS AND RETURNS 500 ERROR
$query->where('status', 0);
$query->where('type', 'x');
$second->where('status', 0);
$second->where('type', 'y');
return $second->union($query)->toSql(); // toSql ONLY FOR DEBUG
我只是想弄清楚为什么这会出错,尽管赋值基本上是同一个查询生成器对象。以下查询可能与您当前的尝试相同,而且更简单:
$query = DB::table('recipes')
->where('status', 0)
->whereIn('type', ['x', 'y']);
->get();
如果出于某种原因,您确实希望在此处使用联合,则必须修复语法:
$first = DB::table('recipes')
->where('status', 0);
->where('type', 'x');
$second = DB::table('recipes')
->where('status', 0);
->where('type', 'y');
->union($first)
->get();
请注意,您可能真的打算在此处执行
UNION ALL
。以下查询可能与您当前的尝试相同,并且更简单:
$query = DB::table('recipes')
->where('status', 0)
->whereIn('type', ['x', 'y']);
->get();
如果出于某种原因,您确实希望在此处使用联合,则必须修复语法:
$first = DB::table('recipes')
->where('status', 0);
->where('type', 'x');
$second = DB::table('recipes')
->where('status', 0);
->where('type', 'y');
->union($first)
->get();
请注意,您可能真的打算在此处执行
UNION ALL
。由于赋值,您有$second
和$query
指向同一个确切的查询生成器实例:
$second = $query;
这不会创建$query
的新副本并将其分配给$second
;这是参考作业。要复制要克隆生成器的对象,请执行以下操作:
$second = clone $query;
当您将DB::table(…)
的结果分配给$second
时,将分配一个新的生成器对象。当您将$second
直接赋值给$query
时,您会在以下语句的末尾得到一条等价语句:
return $query->union($query)->toSql();
这将创建一个我假设的递归循环,并最终完成这个过程
由于分配原因,
$second
和$query
指向同一个确切的查询生成器实例:
$second = $query;
这不会创建$query
的新副本并将其分配给$second
;这是参考作业。要复制要克隆生成器的对象,请执行以下操作:
$second = clone $query;
当您将DB::table(…)
的结果分配给$second
时,将分配一个新的生成器对象。当您将$second
直接赋值给$query
时,您会在以下语句的末尾得到一条等价语句:
return $query->union($query)->toSql();
这将创建一个我假设的递归循环,并最终完成这个过程
等待一分钟,接受3个参数,1)列,2)运算符,3)值。在你的代码中只有2个,这让我很困惑。
toSql()
是否会导致500?如果没有运算符,它将默认为等于运算符。如果您是对的,则为。谢谢您提供的信息。请稍候,接受3个参数,1)列,2)运算符,3)值。在你的代码中只有2个,这让我很困惑。toSql()
是否会导致500?如果没有运算符,它将默认为等于运算符。如果您是对的,则为。谢谢你提供的信息。我正在尝试创建一个动态版本,因为它将用于过滤器。有什么理由我不能去``$first=$second=DB::table('recipes')$首先->何处('status',0)->何处('type','McCormick Official')$第二->where('status',0)->where('type','User Submitted')->union($first)```那也许我不明白你在这里想干什么。此时您应该添加示例数据,这有助于解释您的问题。最初,我打算使用一个查询数组,然后通过union或UNIONALL将它们合并。但是,当我尝试将$query=DB::table('recipes')作为主查询分配给数组时,无论硬编码允许它如何工作,它都会出错。尽管如此,这正是我所需要的。对于最初的问题,有一个更优雅的解决方案,谢谢!我正在尝试创建一个动态版本的过滤器。有什么理由我不能去``$first=$second=DB::table('recipes')$首先->何处('status',0)->何处('type','McCormick Official')$第二->where('status',0)->where('type','User Submitted')->union($first)```那也许我不明白你在这里想干什么。此时您应该添加示例数据,这有助于解释您的问题。最初,我打算使用一个查询数组,然后通过union或UNIONALL将它们合并。但是,当我尝试将$query=DB::table('recipes')作为主查询分配给数组时,无论硬编码允许它如何工作,它都会出错。尽管如此,这正是我所需要的。对于最初的问题,有一个更优雅的解决方案,谢谢!我想知道为什么我的单个查询有太多where查询。这只发生在物体上吗?我以前从未真正需要对我的对象进行克隆。谢谢你的信息!我想知道为什么我的单个查询有太多where查询。这只发生在物体上吗?我以前从未真正需要对我的对象进行克隆。谢谢你的信息!