首页
学习
活动
专区
工具
TVP
发布

TP5中数据表的关联

TP5可以很简单地完成数据表的关联CURD操作。

先看一对一。其关系有主从,不对等,不能互换。如果一个表或者模型包含外键,用belongsTo;如果一个表或者模型,没有外键,外键存在于相关联的表中,用hasOne。

再看多对多。其关系要用到第三张表。多对多关系的中间表,pivot,默认情况下TP5自动带上。而如果用两张表,数据库扩展性比较差,代码会显得很繁琐。

关联建立后,可以使用with。例如,要查找文章的列表,想顺便展示文章的分类名:

$list = Article::with('articleType')->where(‘id‘>0)->paginate();

这里有一个相关问题,那就是数据冗余。互联网类产品,性能为王。嵌套比较多、查询比较复杂时,查询缓慢,数据库字段冗余的合理利用是一定程度上的解决手段之一。如main_img_url和img_id,不用再关联Image模型拿到图片的url。

要注意,是合理利用,如数据结构在很多地方用到、数量不可控时。根据业务做出合理的数据库优化,可以产生非常大的性能提升。这不同于分库分表、设置索引等数据库本身的优化技巧。

当然,滥用数据冗余,会对数据完整性、一致性维护造成困难。写入,需要多个地方。删除尤其是更新,一个地方改变了,需要同时更改两个地方。如果疏忽或者遗忘,只更改了一个地方,将会产生数据不一致。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180302G16DQK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券