TP5关联模型操作推荐(静态方法优先)及其扩展备查

首先我们用ORM(Object Relation Mapping) 对象关系映射 然后优先考虑静态方法 返回的都是当前模型的对象实例

1.首先查询

是用到最多的(而且难免会有复杂的查询条件或者需要实现的查询): 再定义好模型的关联后 我们最常用的应该就是用with了 那么接受参数可以是字符串 或者 数组的形式

1.1.with

字符串形式XxModel::with('items,items.img') 嵌套关系用.分隔 注意只有一对引号 中间是用逗号隔开关联方法 数组的形式XxModel::with(['items','items.img'])推荐使用数组 当然如果只有一个关联方法就用字符串 简洁可读性更好 当然with 最后需要用select 或者 find收尾 完整的例子如下self::with(['items','items.img'])->find($id);

一些复杂的 关联模型查询用法:

对当前模型用limit 和 order self::limit($count) ->order('create_time desc') ->select(); 对关联模型(并且是多重嵌套的话)进行order?闭包形式? self::with([ 'imgs' => function($query){ $query->with(['imgUrl']) ->order('order asc'); } ]) ->with('xxx') ->find('xid'); 其中imgs是关联方法1 imgUrl是关联后的模型的关联方法(A->B->C表) 后面使用闭包进行排序 然后就可以举一反三了 常用的修饰方法还有 visable() hidden() 如果是数据集 还可以用toArray转数组 具体可以看框架源代码查找

1.2 all

顾明思意 是查找全部 当XxModel::all([],[]) 第一个参数如果传空 代表查全部 如果传数组 那么就查指定的数据 如['name'=>'张三','name'=>'李四'] 当然如果是传主键id 可以直接是[1,2,3] 这样子 第二个参数用法跟用with里的参数一致 说白了就是 with+select 的升级版 select 和 find 是基本用法如下不过多赘述 XxModel::with('xxx')->select([1,2,3]); XxModel::with('xxx')->find(2); 关于get这个方法 get方法仅仅会用在当前模型直接去一个数据 然后就没然后了 要取关联模型的数据还是需要配合with + select或find

select查询出的是多条数据,转成数组后可以在模版volist循环打印出来 find和get获取单条数据,可直接在模版打印;

find 或者get返回的是 当前模型的对象实例 然后模型的all方法或者select方法返回的是一个包含模型对象的二维数组或者数据集对象

本模型分页: Xxmodle->where() ->paginate($size,true,['page'=>$page]); 第二个参数true为简洁模式 测试发现paginate取得的数据不受配置文件 配置成数据集对象 这里依然是数组对象 所以可能需要$collection=collection($data->items());进行转换

# 2.新增和修改

单模型新增:模型的静态方法create 直接新增到当前模型? XxModel::create([ 'name' => '哈哈哈' ]); 返回新增的实例对象 比如可以用$res->id取id

单模型修改:update 直接修改当前的关联模型? XxModel::where('id', 1) ->update(['name' => '哦哦哦']);

对于关联模型的新增和修改? 关联新增 $user = User::get(1); // 如果还没有关联数据 则进行新增 $user->profile()->save(['email' => 'thinkphp']); 系统会自动把当前模型的主键传入profile模型。

关联更新 和新增一样使用save方法进行更新关联数据。 $user = User::get(1); $user->profile->save(['email' => 'thinkphp']); **区别在于新增的关联方法profile 带一个括号 而新增则无 **

本模型某字段的的加减 XxModel::where('id', 1) ->setDec('字段名','减少数值');

记录你我
请先登录后发表评论
  • latest comments
  • 总共0条评论