TP6.0 一對(duì)多模型關(guān)聯(lián) hasMany

作者:辰風(fēng)沐陽(yáng) 閱讀:2664 發(fā)布時(shí)間:2020-08-16 上次更新:2021-05-21

本文測(cè)試關(guān)聯(lián)方法都采用預(yù)載入查詢(xún)

  1. Article::with('comments')->select();

1. 創(chuàng)建數(shù)據(jù)表


  1. -- 文章表
  2. CREATE TABLE `article` (
  3. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  4. `title` varchar(255) DEFAULT NULL,
  5. `content` text,
  6. PRIMARY KEY (`id`)
  7. ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
  8. INSERT INTO `article` VALUES (1, 'PHP數(shù)據(jù)類(lèi)型', '文章內(nèi)容01');
  9. INSERT INTO `article` VALUES (2, 'Java常量池', '文章內(nèi)容02');
  10. INSERT INTO `article` VALUES (3, 'Vue Cli 4 引入圖片地址', '文章內(nèi)容03');
  11. -- 文章評(píng)論表
  12. CREATE TABLE `comments` (
  13. `id` int(255) NOT NULL AUTO_INCREMENT COMMENT '評(píng)論ID',
  14. `article_id` int(11) DEFAULT NULL COMMENT '文章ID',
  15. `content` varchar(500) DEFAULT NULL COMMENT '評(píng)論內(nèi)容',
  16. `create_time` int(11) DEFAULT NULL COMMENT '評(píng)論時(shí)間',
  17. PRIMARY KEY (`id`)
  18. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
  19. INSERT INTO `comments` VALUES (1, 1, '作者文采太好了', 1597560224);
  20. INSERT INTO `comments` VALUES (2, 1, '說(shuō)的太對(duì)了', 1597560224);
  21. INSERT INTO `comments` VALUES (3, 2, '這篇文章真不錯(cuò),值得收藏', 1597560224);

2. 文章模型定義一對(duì)多關(guān)聯(lián)方法


  1. public function comments()
  2. {
  3. /**
  4. * hasMany('關(guān)聯(lián)模型', '關(guān)聯(lián)模型外鍵','當(dāng)前模型主鍵');
  5. * Comments 評(píng)論模型
  6. * article_id 評(píng)論表的外鍵字段,關(guān)聯(lián)模型外鍵
  7. * id 文章表主鍵字段,當(dāng)前模型主鍵
  8. */
  9. return $this->hasMany(Comments::class, 'article_id', 'id');
  10. }

3. hasMany() 支持的額外方法


  • 不支持 bind() 綁定關(guān)聯(lián)屬性到模型,因?yàn)榻Y(jié)果是二維數(shù)組,所以不支持

  • 支持 hidden() 隱藏指定的關(guān)聯(lián)屬性

  1. public function comments()
  2. {
  3. return $this->hasMany(Comments::class, 'article_id', 'id')
  4. ->hidden(['create_time', 'content']);
  5. }

標(biāo)簽: ThinkPHP TP6.0