• thinkphp5.1 关联查询


    关联查询使用with查询

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

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

    1. // 查询用户昵称是think的用户
    2. // 注意第一个参数是关联方法名(不是关联模型名)
    3. $users = User::hasWhere('profile', ['nickname'=>'think'])->select();
    4. // 可以使用闭包查询
    5. $users = User::hasWhere('profile', function($query) {
    6. $query->where('nickname', 'like', 'think%');
    7. })->select();

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

    PS:

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

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

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

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

    1. $this::hasWhere('conPssProductStorageRack', function ($query) use ($warehouse_id) {
    2. if ($warehouse_id) {
    3. $query->where('warehouse_id', $warehouse_id)->where('PssProductStorageRackModel.number', '>', 0);
    4. } else {
    5. $query->where('number', '>', 0);
    6. }
    7. }, $field);
    8. $data->with(['conPssProductStorageRack' => function ($query) use ($warehouse_id) {
    9. $query->field('id,product_id,rack_id,number,stand_number,create_time')->where(function ($query) use ($warehouse_id) {
    10. if ($warehouse_id) {
    11. $query->where('warehouse_id', $warehouse_id)->where('number', '>', 0);
    12. } else {
    13. $query->where('number', '>', 0);
    14. }
    15. })->where('is_del', 1);
    16. }, 'conTypeName' => function ($query) {
    17. $query->field('id,type_name')->where('is_del', 1);
    18. }])

  • 相关阅读:
    rpm命令应用
    C语言 pivot_root的Invalid argument错误解决方案
    Matlab与.m脚本文件没有关联,怎么破?
    《JavaSE-第十六章》之ArrayList源码与扩容机制
    C++学习笔记——C++ deque和vector的区别
    CSS Vue/RN 背景使用opacity,文字在背景上显示
    虚拟机Ubuntu18 配置Samba共享设置
    elmenetui表格二次封装包含查询框和分页
    【C#实战】控制台游戏 勇士斗恶龙(3)——营救公主以及结束界面
    CSS3新增伪类有那些?
  • 原文地址:https://blog.csdn.net/qq_32166533/article/details/133983837