如何在Laravel 5中使用查询构建器从子查询中进行选择。

16 浏览
0 Comments

如何在Laravel 5中使用查询构建器从子查询中进行选择。

请帮帮忙,

我有一个查询:

SELECT * from (select * from products ORDER BY id DESC LIMIT 20) AS result ORDER BY discount DESC LIMIT 14

请问如何在laravel 5中转换为查询构建器。

谢谢!

0
0 Comments

问题的原因是在使用查询构建器中的子查询时,无法正确地按照特定的排序规则选择数据。解决方法是使用sortByDesc方法对查询结果进行排序。

解决方法如下:

$q = Products::orderBy('id', 'desc')->take(20)->get();
$test = $q->sortByDesc('nome')->take(14);

以上代码首先按照id字段降序排序,然后选取前20条数据。接着使用sortByDesc方法按照nome字段降序排序,并选取前14条数据。

通过以上方法,可以解决在laravel 5中使用查询构建器进行子查询时,无法按照特定排序规则选择数据的问题。

0
0 Comments

在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中进行子查询,并选择所需的结果。这样,我们就可以更灵活地构建和获取我们想要的数据。

0