Yii2 - 使用联结表插入关系数据,多对多连接

2024-04-23

我在使用 Yii2(稳定版)时遇到问题。

我有一个 Content(PK:id) 表、一个 Tag(PK:id) 表和一个名为 Content_Tag (PK:content_id, tag_id) 的联结表。我想用它来标记,例如 WP 标记。

所有控制器和模型都是用gii 创建的。

我有两个问题:

如果我创建新内容,我想通过 Content_Tag 表将一些新标签保存到 Tag 表中。我怎样才能做到这一点?用链接()?

如果标签表中有标签(我知道 id)怎么办,我想通过联结表仅与内容表连接,而不插入标签表。我怎样才能做到这一点?

我不想编写原生 SQL 命令,我想使用 Yii2 内置函数,如 link() 或 via() 或 viaTable()。

感谢您的帮助!


我创建了一个行为来帮助处理这个问题,基本上你会这样做:

$content = Content::findOne(1);
$tags = [Tag::findOne(2), Tag::findOne(3)];
$content->linkAll('tags', $tags, [], true, true);

您可以在此处获取行为:https://github.com/cornernote/yii2-linkall https://github.com/cornernote/yii2-linkall

如果您希望在没有行为的情况下执行此操作,请执行以下操作:

// get the content model
$content = Content::findOne(1);
// get the new tags
$newTags = [Tag::findOne(2), Tag::findOne(3)];
// get the IDs of the new tags
$newTagIds = ArrayHelper::map($newTags, 'id', 'id');
// get the old tags
$oldTags = $post->tags;
// get the IDs of the old tags
$oldTagIds = ArrayHelper::map($oldTags, 'id', 'id');
// remove old tags
foreach ($oldTags as $oldTag) {
    if (!in_array($oldTag->id, $newTagIds)) {
        $content->unlink('tags', $oldTag, true);
    }
}
// add new tags
foreach ($newTags as $newTag) {
    if (!in_array($newTag->id, $oldTagIds)) {
        $content->link('tags', $newTag);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Yii2 - 使用联结表插入关系数据,多对多连接 的相关文章

  • Yii2:如何通过 Composer 添加 JavaScript 库?

    我已经设置了一个基本应用程序 https github com yiisoft yii2 app basic根据这个指南 安装 Yii http www yiiframework com doc 2 0 guide start instal
  • wbraganca yii2 动态表单日期选择器问题?

    我正在使用 wbraganca 动态形式 在我的表单中 一个字段需要日期选择器 所以我使用 jui 日期选择器 如下所示
  • 如何在 Yii2 中进行多次 UPSERT?

    我正在使用 Yii2 高级模板 我必须在 MySql 数据库中插入 1000 到 2000 条记录 是否可以制作多个UPSERT 查询 in Yii2 请帮助我提供您的建议 答案 谢谢 从版本 2 0 14 开始 您可以使用 upsert
  • 如何将 Yii 1.x 升级到 Yii 2.0?

    如何将 Yii 1 x 版本升级到 Yii 2 0 最新版本 我正在使用一个Ubuntu https en wikipedia org wiki Ubuntu 28operating system 29操作系统 将我的旧 Yii 更新到新
  • 在 Yii2 中,类似于 YII_DEBUG 和 YII_ENV 的全局变量应该放在哪里

    我正在建立一个网站 该网站有一个名为 市场 的 子域 所以 URL 将为 Marketplace sample com 我正在使用 Yii2 高级应用程序 并将以下代码添加到位于 frontend web 的 index php 中 def
  • 如何在yii2中使用if语句正确查看表数据

    我正在研究yii2 我有一个页面 我在其中创建了一个表 现在我想通过数据库查询将一些数据放入其中if else陈述 tbody style text align center line height 12px tbody
  • yii2 拒绝用户登录后端

    我有 yii2 高级模板 应用了 RBAC 迁移 我试图学习 RBAC 并遵循Docs 2 0 http www yiiframework com doc 2 0 guide security authorization html 我是用数
  • 客户端验证不起作用

    我正在 yii2 中进行客户端验证 但它对我不起作用 查看文件 ul class breadcrumb li a href index html Home a li li a href Pages a li li class active
  • 如何以使用不同模型的形式实现kartik yii2 FileInput

    这是位于 myyiiapp backend views product form php 的代码 div class product form div
  • Yii2 环境文件夹背后的想法是什么以及如何使用它?

    我已经通读过 Yii2 文档好几次了 我也用谷歌搜索 但还没有找到任何有用的东西 问题是我不理解环境文件夹的概念 请让我解释一下 我可以在 Git 中使用分支 用于开发 登台和生产 local conf文件会被 Git 忽略 并且不会以任何
  • 如何在 Apache 网站内托管 ASP.NET Core Web 应用程序?

    我有一个旧的php使用开发的应用程序Yii2框架托管在Centos路径上的服务器 var www html 该应用程序可在以下位置访问http somedomain com 我正在开发使用新的 API 项目ASP NET MVC Core需
  • Kartik Select2 - 以编程方式更改多个

    我有一个 yii2 activeform 其中表单的功能可以根据表单中的其他内容进行更改 所以 我有一个俱乐部字段 在某些情况下可以是多个 但在其他情况下不能是多个
  • 在 Yii2 中通过 Ajax 上传不包括文件

    我正在尝试通过 Ajax 请求上传图像 似乎遇到了类似的问题这个问题 https stackoverflow com questions 32055274 upload ajax file in yii2但它没有答案 我不确定它们是否完全相
  • 如何在yii2高级模板中上传web文件夹中的文件?

    我尝试在后端上传文件 每次上传文件时 它都会成功上传并成功保存在数据库中 但它没有保存到我指定的目录中 因此我的应用程序找不到该文件 并且我已经给出了 777对 web 目录中的 uploads 文件夹的权限 下面是我的代码 处理和保存文件
  • Yii2:配置参数与 const/define

    我什么时候应该使用什么 我可以选择在index php入口脚本文件中定义常量 就像推荐的那样Yii2 指南 常量 http www yiiframework com doc 2 0 guide structure entry scripts
  • Yii2如何检查两个模型是否已经链接

    我有两个通过连接表关联的模型 model gt link 是用于建立两个模型之间关系的方法 它基本上用两个模型的相应键填充连接表 如果两个模型已链接并且我尝试再次链接它们 则会出现错误 因为密钥对已存在于连接表中 然后我需要在尝试链接模型之
  • codecept:未找到命令

    我全新安装了 Ubuntu 在安装 Yii2 等之后 我似乎无法再运行 codecept 了 我用的是Yii2 我需要在composer json 中使用最新的codecept 版本 该版本工作正常 但我似乎找不到一种方法来让代码接收再次运
  • 关于 Yii2 RBAC 的疑惑

    到目前为止 我一直在使用 Yii 1 1 14 开发 Web 应用程序 但现在是时候进行升级了 我工作的公司开发了自己的访问控制系统 我对它真的很满意 直到我看到它到底是什么样子 数据库中8个表的组合 不包括用户表 还有一堆外键 1 个控制
  • 使用选项卡小部件将 ActiveForm 字段拆分为不同的选项卡

    我正在创建一个表单视图 我想使用官方选项卡小部件以选项卡结构组织表单字段 是否可以使用包含活动表单字段的 div 元素的 id 或类 来初始化选项卡小部件 如何管理它的一个示例如下 首先 将您的联系表单分为每个选项卡的一个视图文件 将 Ac
  • 在yii2的视图中添加模型中没有的自定义字段

    我在 yii2 中保存表单时遇到问题 我创建了一个自定义字段 其名称与其他字段相同Myposts categoryLevel2 该字段不在模型中 它是一个条件字段 当我发布我的内容时 我将其值分配给模型属性 例如 categoryLevel

随机推荐