【问题标题】:Convert Raw SQL Query to Laravel Eloquent [closed]将原始 SQL 查询转换为 Laravel Eloquent [关闭]
【发布时间】:2019-04-04 09:37:33
【问题描述】:

我的项目是一个内容管理系统,它的新版本将集成到 Laravel 框架中;并且有很多庞大的 SQL 查询需要转换成雄辩的语法。

我找到了以下tool 将我已经编写的查询转换为雄辩的语法,但它不起作用。

谁能指导我转换我的查询或帮助我找到可以完成这项工作的工具?

请在下面找到我的查询示例(请注意,我的大多数查询看起来都相似):

SELECT id, name, code,
       ( SELECT price FROM productprice WHERE id = p.id ) AS price,
       ( SELECT image FROM productpictures WHERE id = p.id LIMIT 1 ) 
AS image
FROM product p 
WHERE categoryid = 1

谢谢。

【问题讨论】:

  • 如果您想使用 ORM,那么您需要创建扩展 Illuminate\Database\Eloquent\Model 的模型并设置适当的关系。或者您可以使用 Illuminate\Database\Eloquent\Builder 来使用流畅的接口或标准的 SQL 语法。你打算使用哪种方法?
  • 有在线转换大查询的工具吗?
  • 如前所述:laravel 文档是最好的工具。链接:laravel.com/docs/master/queries 不懂的东西就不能指望开发好。 Eloquent 对于任何了解 MySQL 的人来说都很简单,在许多情况下更容易。
  • 我知道口才。我发布了这个问题对查询没有帮助。我问我有很多大的 sql 查询,将它们转换成 eloquent 需要时间。我问有没有办法更快地转换查询?
  • 大有多大?我处理过可能有 100 行的语句。在某些情况下,最好不要使用 eloquent。你需要做出决定。我非常怀疑你会找到一个比简单的 SQL 字符串更复杂的转换器,否则它可能会出现很多错误,因为你可能会花费更多的时间来修复而不是自己动手。

标签: php mysql sql laravel eloquent


【解决方案1】:

我只是为此做了一个工具。你可以免费使用here

【讨论】:

    【解决方案2】:

    请使用此online tool 将 SQL 查询转换为 Laravel Builder。

    转换后的查询应该显示在 Laravel Builder 中:

    DB::select(`id`,`name`,`code`)
        ->selectSub(`SELECT price FROM productprice WHERE id = p.id`, `price`)
        ->selectSub(`SELECT image FROM productpictures WHERE id = p.id LIMIT 1`, `image`)
        ->from(`product as p`)
        ->where(`categoryid`, `=`, 1)
        ->get();
    

    【讨论】:

      【解决方案3】:

      你的 SQL 真的应该像这样使用连接:

      SELECT 
      p.id,
      p.name,
      p.code,
      pprice.price,
      ppictures.image
      FROM product p
      LEFT JOIN productprice pprice on p.id = pprice.id
      LEFT JOIN productpictures ppictures on p.id = ppictures.id
      WHERE p.categoryid = 1;
      

      您可以阅读更多关于左连接的here

      另外,像这样匹配 ID 可能不是建议,最好在 productpictures 和 productprices 上有一个 product_id,然后你可以对 products 表有一个外键约束。

      但这不是问题所在。要把它变成 laravel eloquent 你应该使用relationships 然后你可以简单地做这样的事情:

      $Product = Product::select('id', 'name', 'code')
      ->with('ProductPrice', 'ProductPictures')
      ->where('categoryid', 1)
      ->get();
      

      你将能够像这样把它拉出来:

      $Product->id;
      $Product->name;
      $Product->code;
      $Product->ProductPrice->price;
      $Product->ProductPicture->image;
      

      【讨论】:

        猜你喜欢
        • 2019-05-31
        • 1970-01-01
        • 2019-04-29
        • 2021-09-11
        • 2016-04-27
        • 2018-10-11
        • 2018-09-12
        • 2020-02-07
        • 2019-02-03
        相关资源
        最近更新 更多