laravel 联表查询with方法使用

本文详细介绍了Laravel框架中Eloquent ORM的一对一、一对多关联查询方法。通过示例展示了如何在商品模型中关联分类模型,以及如何在订单模型中关联订单商品和商品分类。控制器调用时,可以使用`with`方法进行预加载,以提高查询效率。此外,还阐述了如何查询多级关联数据,如订单、订单商品及商品分类的嵌套关联查询。

一、一对一关联

        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();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值