php - 分配查询时 Laravel union 500 错误
问题描述
所以我有以下代码......
$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
我只是想弄清楚为什么尽管分配的值本质上是相同的查询构建器对象,但仍然会出错。
解决方案
由于分配,您拥有$second
并$query
指向相同的 Query Builder 实例:
$second = $query;
这不会创建新副本$query
并将其分配给$second
; 这是通过引用分配。要复制您想要克隆 Builder 的对象:
$second = clone $query;
当您分配结果时,将分配DB::table(...)
一个$second
新的 Builder 对象。当您对 to 进行直接分配时$second
,$query
您最终会在结尾处得到等效的语句:
return $query->union($query)->toSql();
这将创建一个递归循环,我会假设并最终取消该过程。
推荐阅读
- tensorflow - Tensorflow 在 GPU 和 CPU 上的结果不同
- android-studio - Android Studio中的build.gradle文件(项目级)不是纯文本,无法读取
- python - 无法在带有蓝图的烧瓶应用程序上运行 cors
- c++ - 如何打开 .bpr 文件并构建项目?
- python - 可视化文件夹目录中神经网络保存的权重
- docker - 在 Openshift 上保护基于路径的路由
- user-interface - 如何在 Windows 上编译具有threepenny-gui 库的现有Haskell 项目?
- excel - 循环通过细胞并移动到不同的表
- amazon-web-services - 链接安全组
- python - Python 中使用 Selenium 元素的列表理解不适用于推文