thinkphp5.1 关联查询

本文介绍了如何在Laravel框架中使用with方法进行关联查询,以及hasWhere的用法,包括在hasWhere后的特殊情况如field失效和字段歧义的处理。还提到了使用闭包查询和hasWhere的限制条件。
摘要由CSDN通过智能技术生成

关联查询使用with查询

$users = User::with(['profile'	=> function($query) {
	$query->field('name,email');
}])->select();
foreach ($users as $user) {
	echo $user->profile->name;
}

如果查询数据时,没有数据,则不返回整条信息,则使用 hasWhere,进行查询

// 查询用户昵称是think的用户
// 注意第一个参数是关联方法名(不是关联模型名)
$users = User::hasWhere('profile', ['nickname'=>'think'])->select();

// 可以使用闭包查询
$users = User::hasWhere('profile', function($query) {
	$query->where('nickname', 'like', 'think%');
})->select();

使用 hasWhere ,时,必须 放在最前面,如果关联的数据为空,则整条都不返回,且即使使用 闭包查询也无效,都必须要有数据才返回,闭包只作为2次限制使用,未查询到数据,则不返回(前提,关联数据必须要有数据)

PS:

1.使用 hasWhere 后,field 失效($this->field(‘id’))无效,需要使用下面的方式进行查询,使用 hasWhere 的第三个参数进行解决;

$data = PayOrderModel::hasWhere('user', ['id'=>$this->USER->id], 'order_title,order_number,order_price,pay_type,actual_price,pay_time')
    //->field('order_title,order_number,order_price,pay_type,actual_price,pay_time')
    ->where('status', ['=',2], ['=',4], 'or')
    //->order('id','desc')
    //下面这两种方式任选一种
    //使用表名
    //->order('pay_order.id','desc')
    //使用模型名
    ->order('PayOrderModel.id','desc')
    ->limit($start,$limit)
    ->select();

2.使用 hasWhere 后,如果出现字段报错,“Integrity constraint violation: 1052 Column 'number' in where clause is ambiguous”,

则需要在字段前加上模型名,with 则不需要

$this::hasWhere('conPssProductStorageRack', function ($query) use ($warehouse_id) {
         if ($warehouse_id) {
         $query->where('warehouse_id', $warehouse_id)->where('PssProductStorageRackModel.number', '>', 0);
                } else {
                    $query->where('number', '>', 0);
                }
            }, $field);

$data->with(['conPssProductStorageRack' => function ($query) use ($warehouse_id) {
            $query->field('id,product_id,rack_id,number,stand_number,create_time')->where(function ($query) use ($warehouse_id) {
                if ($warehouse_id) {
                    $query->where('warehouse_id', $warehouse_id)->where('number', '>', 0);
                } else {
                    $query->where('number', '>', 0);
                }
            })->where('is_del', 1);
        }, 'conTypeName' => function ($query) {
            $query->field('id,type_name')->where('is_del', 1);
        }])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值