yii2中的表之间的关联有2种,它们用来指定两个模型之间的关联。

一对多:hasMany
一对一:hasOne (推荐学习:yii教程)
返回结果:这两个方法的返回结果都为yiidbActiveQuery对象
第一个参数:所关联的模型的类名称。
第二个参数:是一个数组,其中键为所关联的模型中的属性,值为当前模型中的属性。
关联的使用
现在我们获取一个客户的所有的订单信息
AppMall应用商店
AI应用商店,提供即时交付、按需付费的人工智能应用服务
56 查看详情
$customer = Customer::findOne(1); $orders = $customer->orders; // 通过在Customer中定义的关联方法(getOrders())来获取这个客户的所有的订单。
上面的两行代码会生成如下sql语句
SELECT * FROM customer WHERE id=1; SELECT * FROM order WHERE customer_id=1;
关联结果缓存
如果客户的订单改变了,我们再重新调用
$orders = $customer->orders;
再次得到订单的时候你会发现没有变化。原因是只会在第一次执行$customer->orders的时候才会去数据库里面查询,然后会把结果缓存起来,以后查询的时候都不会再执行sql。
那么如果我想再次执行sql如何做呢?可以执行
unset($customer->orders); $customer->orders;
然后就可以从数据库里面取数据了。
代码说明:
// 执行sql语句: SELECT * FROM customer WHERE id=1 $customer = Customer::findOne(1); //执行sql:SELECT * FROM order WHERE customer_id=1 $orders1 = $customer->orders; //这个不会执行sql,直接使用上面的缓存结果 $orders2 = $customer->orders;//如果中间的用户订单有变化,我们就不能从缓存中获取,要unset掉unset($customer->orders); $orders2 = $customer->orders;
以上就是yii2 hasone怎么用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/211062.html
微信扫一扫
支付宝扫一扫