【问题标题】:How to convert laravel query to sql query?如何将 laravel 查询转换为 sql 查询?
【发布时间】:2021-10-11 00:47:32
【问题描述】:

Laravel 查询如下,你能解释一下它是如何工作的吗?

Business::orderby('name')
                ->with(['subscriptions' => function ($query) use ($date_today) {
                    $query->whereDate('start_date', '<=', $date_today)
                        ->whereDate('end_date', '>=', $date_today);
                }, 'locations', 'owner'])
                ->paginate(21);

这是 Laravel 查询,我想将其转换为普通查询?如果我想再加入一张表到Business 模型,该怎么做?

【问题讨论】:

  • 使用toSql()打印mysql查询
  • -&gt;toSql() 代替-&gt;paginate(21)
  • 它没有生成,只有我得到``` select * from business order by name asc ```
  • 该查询是您对共享代码的期望。 with 查询与主查询分开执行。您需要分享有关您要实现的目标的更多详细信息,因为我怀疑有更好的方法可以做到这一点而无需原始查询
  • 尝试在表名上加上一些错误,整个查询都会显示错误。

标签: php mysql sql laravel laravel-5.8


【解决方案1】:

首先,您的要求从问题中不清楚。

你需要了解 Laravel 的 Query BuilderRelations eager loading 以了解上面的查询在做什么以及如何在 laravel 查询中做 joins

上述查询是通过eager loading 关系查询Business 模型-subscriptionsownerlocations 在一个查询中。此外,除了获取所有订阅之外,它还根据 $date_today 过滤关系。

如果你想加入其他模型,那么你可以使用 laravel joins 。那么你的查询会变成:

Business::orderby('name')->with(['subscriptions' => function ($query) use ($date_today) {
                    $query->whereDate('start_date', '<=', $date_today)
                        ->whereDate('end_date', '>=', $date_today);
                }, 'locations', 'owner'])
                ->joins(JOIN QUERY)->paginate(21);

确保将 JOIN QUERY 替换为您所需的逻辑。

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 2020-07-14
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-01
    相关资源
    最近更新 更多