ThinkPHP5联合(关联)查询、多条件查询与聚合查询实例详解
在ThinkPHP5中,联合(关联)查询、多条件查询和聚合查询是非常常见的数据库查询操作。下面将详细讲解这三种查询的实例,以帮助你更好地理解和应用它们。
联合(关联)查询
联合(关联)查询是指通过多个表之间的关联关系,一次性查询出相关联的数据。在ThinkPHP5中,可以使用模型关联来实现联合查询。
示例1:假设有两个表,一个是user
表,另一个是order
表,它们之间通过user_id
字段关联。我们要查询出所有用户及其对应的订单信息。
// User模型
namespace app\\index\\model;
use think\\Model;
class User extends Model
{
// 定义与Order模型的关联关系
public function orders()
{
return $this->hasMany('Order', 'user_id');
}
}
// Order模型
namespace app\\index\\model;
use think\\Model;
class Order extends Model
{
// 定义与User模型的关联关系
public function user()
{
return $this->belongsTo('User', 'user_id');
}
}
// 控制器中的查询操作
namespace app\\index\\controller;
use app\\index\\model\\User;
class UserController
{
public function index()
{
// 查询所有用户及其对应的订单信息
$users = User::with('orders')->select();
// 输出查询结果
foreach ($users as $user) {
echo '用户ID:' . $user->id . '<br>';
echo '用户名:' . $user->name . '<br>';
foreach ($user->orders as $order) {
echo '订单ID:' . $order->id . '<br>';
echo '订单金额:' . $order->amount . '<br>';
}
echo '<br>';
}
}
}
示例2:假设有三个表,分别是user
表、order
表和product
表,它们之间通过user_id
和product_id
字段关联。我们要查询出所有用户购买的产品信息。
// User模型和Order模型同示例1
// Product模型
namespace app\\index\\model;
use think\\Model;
class Product extends Model
{
// 定义与Order模型的关联关系
public function orders()
{
return $this->belongsToMany('Order', 'order_product', 'product_id', 'order_id');
}
}
// 控制器中的查询操作同示例1
多条件查询
多条件查询是指根据多个条件来查询数据库中的数据。在ThinkPHP5中,可以使用查询构造器来实现多条件查询。
示例1:查询user
表中年龄大于等于18岁且性别为女性的用户。
namespace app\\index\\controller;
use think\\Db;
class UserController
{
public function index()
{
// 多条件查询
$users = Db::name('user')
->where('age', '>=', 18)
->where('gender', 'female')
->select();
// 输出查询结果
foreach ($users as $user) {
echo '用户ID:' . $user['id'] . '<br>';
echo '用户名:' . $user['name'] . '<br>';
echo '年龄:' . $user['age'] . '<br>';
echo '性别:' . $user['gender'] . '<br>';
echo '<br>';
}
}
}
示例2:查询order
表中金额大于1000且状态为已支付的订单。
namespace app\\index\\controller;
use think\\Db;
class OrderController
{
public function index()
{
// 多条件查询
$orders = Db::name('order')
->where('amount', '>', 1000)
->where('status', 'paid')
->select();
// 输出查询结果
foreach ($orders as $order) {
echo '订单ID:' . $order['id'] . '<br>';
echo '订单金额:' . $order['amount'] . '<br>';
echo '订单状态:' . $order['status'] . '<br>';
echo '<br>';
}
}
}
聚合查询
聚合查询是指对数据库中的数据进行统计和计算。在ThinkPHP5中,可以使用查询构造器的聚合函数来实现聚合查询。
示例1:查询order
表中的订单总数。
namespace app\\index\\controller;
use think\\Db;
class OrderController
{
public function index()
{
// 聚合查询
$count = Db::name('order')->count();
// 输出查询结果
echo '订单总数:' . $count;
}
}
示例2:查询order
表中的订单总金额。
namespace app\\index\\controller;
use think\\Db;
class OrderController
{
public function index()
{
// 聚合查询
$sum = Db::name('order')->sum('amount');
// 输出查询结果
echo '订单总金额:' . $sum;
}
}
以上就是关于ThinkPHP5联合(关联)查询、多条件查询和聚合查询的详细攻略,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ThinkPHP5联合(关联)查询、多条件查询与聚合查询实例详解 - Python技术站