🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 远程关联 国家 -> 用户 -> 帖子 国家一对多用户一对多帖子 countries 国家表 | 键名 | 类型 | | --- | --- | | id | PK | | uid | FK users's id | | name | varchar(200) | | users | 用户表 | users 用户表 | 键名 | 类型 | | --- | --- | | id | PK | | cid | FK countries's id | | username | varchar(200) | | posts | 发帖表 | posts 发帖表 | 键名 | 类型 | | --- | --- | | id | PK | | uid | FK users's id | | title | varchar(200) | | content | text | | created_at | timestamp | | updated_at | timestamp | # 实现 Country.php ~~~ function posts() { //参数顺序为 model through_model first_key second_key local_key return $this->hasManyThrough(Post::class,User::class, 'cid', 'uid', 'id'); } ~~~ ID 参数的顺序: > first_key 为CLASS的 id 的外键 对应 countries' id > second_key 为中间表的 id 的外键 对应 users' id > other_key 为CLASS的 id # 操作 ## 查 ~~~ $county = County::find(2); $county->posts(); ~~~ ## 新增/修改/删除 对于这种复杂的场景,发帖,应该是 「用户 - 发帖」这样一对多关系,「发帖」 与「国家」并无直接无关,所以需要分解场景。 此三级关系一般只用于查找。 associate()不适用用于morphTo();所以只能单向的用save()绑定了; 关于解绑,dissociate()也不适用用于morphTo();所以,只能把实例删除!!删除了就没任何关系了(因为没有中间表)