📜  laravel join 查询求和示例 - PHP (1)

📅  最后修改于: 2023-12-03 15:02:35.121000             🧑  作者: Mango

Laravel Join 查询求和示例

在 Laravel 中,我们可以使用 join 查询来汇总数据并计算总和。本文将介绍如何使用 Laravel 中的 join 查询来实现数据求和。

什么是 Join 查询

Join 查询是关系型数据库中最基本、最重要的查询方式之一。它是将两张或多张表按照某个共同字段进行关联查询的方式。

在 Laravel 中,我们可以使用 join 查询来查询两张或多张表中的数据,并将其合并为一张表。

Laravel Join 查询示例

首先,我们需要创建一个包含订单和商品信息的两张表。我们可以使用以下 SQL 语句来创建这些表。

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE `products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `price` decimal(10,2) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

以上 SQL 语句会创建一个名为 orders 的订单表和一个名为 products 的商品表。这两张表之间没有任何关联。

现在,在这两张表中插入一些示例数据:

INSERT INTO `orders` (`name`, `created_at`) VALUES ('order1', '2021-01-01 00:00:00');
INSERT INTO `orders` (`name`, `created_at`) VALUES ('order2', '2021-01-01 00:00:00');
INSERT INTO `orders` (`name`, `created_at`) VALUES ('order3', '2021-01-01 00:00:00');
INSERT INTO `orders` (`name`, `created_at`) VALUES ('order4', '2021-01-01 00:00:00');

INSERT INTO `products` (`name`, `price`, `created_at`) VALUES ('product1', '10.00', '2021-01-01 00:00:00');
INSERT INTO `products` (`name`, `price`, `created_at`) VALUES ('product2', '20.00', '2021-01-01 00:00:00');
INSERT INTO `products` (`name`, `price`, `created_at`) VALUES ('product3', '30.00', '2021-01-01 00:00:00');
INSERT INTO `products` (`name`, `price`, `created_at`) VALUES ('product4', '40.00', '2021-01-01 00:00:00');

现在,我们将这两张表关联起来,并计算每个订单中商品的总价值。我们可以使用以下 Laravel 查询来实现:

DB::table('orders')
    ->select('orders.name', DB::raw('SUM(products.price) as total'))
    ->join('order_products', 'orders.id', '=', 'order_products.order_id')
    ->join('products', 'order_products.product_id', '=', 'products.id')
    ->groupBy('orders.name')
    ->get();

以上查询语句将返回一个包含每个订单名称和该订单中所有商品的总价值的结果集。

总结

使用 Laravel Join 查询可以轻松地查询两张或多张数据表中的数据,完成多表关联和汇总计算。本文介绍了 Laravel Join 查询的基本应用,希望对开发者们有所帮助。