如何在Laravel 5中使用查询构建器从子查询中进行选择。
在Laravel 5中,使用查询构建器和导入DB可以构建和获取所需的结果。然而,在某些情况下,使用查询构建器进行子查询时可能会遇到问题。
问题的出现原因是在子查询中使用查询构建器时,无法直接从子查询中进行选择。在上面的代码示例中,我们可以看到使用了DB::raw()函数来构建一个子查询,然后再从子查询中选择所需的数据。
解决方法是使用DB::table()方法来选择子查询中的结果。通过将子查询的结果作为一个表传递给DB::table()方法,我们可以在子查询的基础上进行进一步的操作,例如选择特定的列、排序和限制结果集的数量。
以下是修复后的代码示例:
use DB; $result = DB::table( DB::table('products') ->select('*') ->orderBy('id', 'desc') ->limit(20) ->toSql() ->setBindings([]) . " as result" ) ->select('*') ->orderBy('discount', 'desc') ->limit(14) ->get();
在修复后的代码中,我们首先从子查询中选择所需的数据,并将其作为一个表传递给DB::table()方法。然后,我们可以继续选择特定的列、排序和限制结果集的数量,最后使用get()方法获取数据。
通过这种方式,我们可以使用查询构建器在Laravel 5中进行子查询,并选择所需的结果。这样,我们就可以更灵活地构建和获取我们想要的数据。