mysql - 通过使用 laravel 的查询构建器设置默认表来避免连接时的列歧义
问题描述
我想revenues
通过关系的列('orders.number')订购一个查询(从表中)。一份订单有很多收入。问题是收入和订单共享一个共同的列 ( description
),这会导致在过滤时产生歧义where()
。我知道我可以在过滤时指定表,但这里的问题是我使用的是全局范围,它通过配置文件中的预设列对查询进行排序,并且description
是其中之一。我以前不知道表名并将其作为参数发送给函数对我来说似乎有点过头了。
$revenues = App\Revenue::
with('order.client', 'order.place')
->sessionSearch('revenues')
->orderBy('created_at', 'desc')
->join('orders', 'orders.id', '=', 'revenues.order_id')
->select('revenues.*', 'orders.number as order_number')
->orderBy('order_number', 'desc')
->paginate(perPage());
我尝试在方法中动态添加表名sessionSearch()
,但我无法通过传递的Builder
实例访问它,因为它受到保护。
我还认为通过执行leftJoin
mysql 会知道我的主表是哪个并且可能以它的列为目标,但歧义仍然是一个问题。
有没有一种方法可以在我的 sql 设置中默认设置一个有利的表,以免造成歧义?基本上我只需要订单表中的数字,但仍然会抛出歧义错误。
提前感谢您的帮助!
解决方案
推荐阅读
- javascript - 在我的反应 js 项目中运行 npm start 时出现白屏
- imagemagick - 如何仅使用 ImageMagick 命令行保留红色
- maven - 如何解决 Cucumber Maven 项目中的“io.cucumber.core.backend.ObjectFactory”编译器错误?
- python - Django:psycopg2.errors.UndefinedColumn:“pages_page”关系的列“page_image”不存在
- android - 从 Gallery 获取图像 URI 并将其传递给另一个活动,看不到图像,获得异常
- java - 如何检测 Java 类中的文件位置?
- mysql - mysqldump 不导出数据,仅导出模式
- python - Create aggregate columns based on list of headers
- c++ - log4cpp 在一段时间后停止正常工作
- selenium - DataDriver 不读取 csv 文件