首页 > 解决方案 > 通过使用 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实例访问它,因为它受到保护。

我还认为通过执行leftJoinmysql 会知道我的主表是哪个并且可能以它的列为目标,但歧义仍然是一个问题。

有没有一种方法可以在我的 sql 设置中默认设置一个有利的表,以免造成歧义?基本上我只需要订单表中的数字,但仍然会抛出歧义错误。

提前感谢您的帮助!

标签: mysqllaravellaravel-5.6laravel-query-builder

解决方案


推荐阅读