通过使用laravel的查询生成器设置默认表来避免联接时的列歧义

时间:2019-04-05 07:45:10

标签: mysql laravel laravel-5.6 laravel-query-builder

我想通过关系的列(“ orders.number”)对查询(从revenues表进行排序)。一个订单有很多收入。问题在于收入和订单都共享一个公用列(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设置中默认设置一个有利的表,以免引起歧义?基本上我只需要订单表中的数字,但是仍然会产生歧义错误。

在此先感谢您的帮助!

0 个答案:

没有答案