一、一对一关联
1、例如:一个商品对应一个分类,首先在商品模型中关联分类模型的方法
/**
* 商品分类
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function categoryInfo() {
// 第一个参数为目标分类的模型,第二个参数为目标分类的主键ID,第三个参数为商品的关联字段
return $this->hasOne(CategoryModel::class, 'id', 'category_id')->select(['id', 'name']);
}
2、控制器调用商品模型查询
// 普通查询方法
GoodsModel::with('categoryInfo')->select();
// 使用闭包方法
GoodsModel::with(['goodsList' => function ($query) {
$query->select(['id', 'name']);
}])->select()->get()->toArray();
二、一对多关联
1、例如一个订单对应多个商品
/**
* 商品列表
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function orderDetail() {
// 第一个参数为目标分类的模型,第二个参数为目标分类的主键ID,第三个参数为商品的关联字段
return $this->hasMany(OrderDetailModel::class, 'order_id', 'order_id');
}
2、控制器查询订单和订单商品
// 查询
OrderModel::with('orderDetail')->select()->get()->toArray;
三、A表关联B表,B表关联C表如何使用
1、例如一个订单关联多个订单商品,订单商品关联一个分类
a、订单模型定义订单商品列表方法
/**
* 商品列表
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function orderDetail() {
// 第一个参数为目标分类的模型,第二个参数为目标分类的主键ID,第三个参数为商品的关联字段
return $this->hasMany(OrderDetailModel::class, 'order_id', 'order_id');
}
b、商品模型定义分类方法
/**
* 商品分类
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function categoryInfo() {
// 第一个参数为目标分类的模型,第二个参数为目标分类的主键ID,第三个参数为商品的关联字段
return $this->hasOne(CategoryModel::class, 'id', 'category_id')->select(['id', 'name']);
2、控制器查询订单信息、订单商品以及订单商品下的分类(注意:这时候就应该用闭包函数了)
OrderModel::with(['orderDetail' => function ($query) {
$query->with(['categoryInfo']);
}])->select();
本文详细介绍了Laravel框架中Eloquent ORM的一对一、一对多关联查询方法。通过示例展示了如何在商品模型中关联分类模型,以及如何在订单模型中关联订单商品和商品分类。控制器调用时,可以使用`with`方法进行预加载,以提高查询效率。此外,还阐述了如何查询多级关联数据,如订单、订单商品及商品分类的嵌套关联查询。
6万+

被折叠的 条评论
为什么被折叠?



