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查询。这只发生在物体上吗?我以前从未真正需要对我的对象进行克隆。谢谢你的信息!