在建设部网站呢李可以看出需要什么时候考试,制作海报,电子商务网站硬件需求,企业展厅的作用【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客
《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书
使用VS Code开发ThinkPHP项目-CSDN博客
编程与应用开…【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客
《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书
使用VS Code开发ThinkPHP项目-CSDN博客
编程与应用开发_夏天又到了的博客-CSDN博客
多对多关联属于比较复杂的关联需要借助一个中间表实现在模型中使用belongsToMany定义。在介绍ThinkPHP 8的多对多语法之间我们先来看一个例子以加深对多对多关联的理解。
比如我们开发一个博客系统每篇文章可以关联多个标签每个标签可以关联多篇文章涉及的数据表如表8-1~表8-3所示。 如果我们需要查询ThinkPHP教程这篇文章关联了哪些标签可以用文章ID从文章标签关联表获得标签ID列表[1,2]再从标签表查询[1,2]的标签得到PHP和ThinkPHP。
查询PHP这个标签关联了哪些文章也是类似的先用标签ID从文章标签关联表获得文章ID列表[1,2]再从文章表查询到两篇文章。
下面是文章标签多对多关联的ThinkPHP 8模型示例。首先根据上面3个表格创建数据表SQL语句如下
CREATE TABLE article (aid int NOT NULL AUTO_INCREMENT,title varchar(45) NOT NULL,content varchar(45) NOT NULL,PRIMARY KEY (aid)
) ENGINEInnoDB DEFAULT CHARSETutf8mb3;
CREATE TABLE tag (tid int NOT NULL AUTO_INCREMENT,tname varchar(45) COLLATE utf8mb3_unicode_ci NOT NULL,PRIMARY KEY (tid)
) ENGINEInnoDB DEFAULT CHARSETutf8mb3 COLLATEutf8mb3_unicode_ci;
CREATE TABLE articletag (aid int NOT NULL,tid int NOT NULL,PRIMARY KEY (id)
) ENGINEInnoDB AUTO_DEFAULT CHARSETutf8mb3 COLLATEutf8mb3_unicode_ci;再使用MySQL Workbench工具按表8-1~表8-3给出的数据手工填充数据表。接下来就可以编写多对多关联示例代码了。
1. 文章表
文章表示例如下
?php
namespace app\model;use think\Model;class ArticleModel extends Model
{protected $pk aid; // 一定要声明主键 protected $table article;// 设置字段信息protected $schema [aid int,title string,content string,];public function tags(){return $this-belongsToMany(TagModel::class, ArticleTagModel::class ,foreignKey:aid,localKey:aid);}
}2. 标签表
标签表示例如下
?php
namespace app\model;use think\Model;class TagModel extends Model
{protected $pk tid; // 一定要声明主键 protected $table tag;// 设置字段信息protected $schema [tid int,tname string,];public function articles(){return $this-belongsToMany(ArticleModel::class, ArticleTagModel::class,foreignKey:tid,localKey:tid );}
}3. 文章标签关联表
需要注意的是中间表模型需要继承think\model\Pivot而不是使用默认的think\Model示例如下
?php
namespace app\model;
//中间表模型需要继承think\model\Pivot
use think\model\Pivot;class ArticleTagModel extends Pivot
{ protected $table articletag;// 设置字段信息protected $schema [aid int,tid int,];
}4. 关联查询
关联查询示例如下
use think\Model;
use app\model\ArticleModel;
use app\model\TagModel;class Article
{public function many2many(){$article ArticleModel::with([tags])-find(1);//$article ArticleModel::with([tags])-select();//print_r( $article);//print_r( $article-tags );foreach($article-tags as $tag) {echo $tag-tname, PHP_EOL;}}
}上面3个模型1个控制器完成后运行服务器在浏览器中访问http://localthost:8000/article/ many2many可以关联查询出aid为1的文章以及其标签有哪些。