在 yiimongodbsuite 中更新插入嵌入文档

2024-02-20

我需要在 yiimongodbsuite 中执行 upsert 命令。 我试过

$model   = new Murls();          
                $model->userid=$userid;
                $model->title=$title;      
                $model->edits[0] = new Medithtml();
                $model->edits[0]->path= $htm;
                $model->edits[0]->html=$path;
                $model->edits[0]->ci=$ci;
                $model->update(array('_id'=>$rec->_id ),array('userid', 'title','edits' ), true );

但这显示了一个错误。

Murls模型定义如下

   class Murls extends EMongoDocument
    {
        public $userid;
        public $title;
        public $edits;



   public static function model($className=__CLASS__)
      {
        return parent::model($className);
      }

      // This method is required!
      public function getCollectionName()
      {
        return 'murls';
      }

      public function attributeLabels()
      {
        return array(
          'html'=>'Html',
        );
      }

      public function embeddedDocuments()
      {
        return array(
                // property name => embedded document class name
                'edits'=>'Medithtml',

        );
      }

      public function behaviors(){
            return array(
                            'embeddedArrays' => array(
                                'class' => 'ext.YiiMongoDbSuite.extra.EEmbeddedArraysBehavior',
                                'arrayPropertyName' => 'edits', // name of property, that will be used as an array
                                'arrayDocClassName' => 'Medithtml'    // class name of embedded documents in array
                ),
        );
      }

    }

并将 Medithtml 建模为

class Medithtml extends EMongoEmbeddedDocument{
    public $html;
    public $path;
    public $ci;

    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }


}

我需要实现的是记录$title可以有n个$html , $path and $ci。 任何帮助将不胜感激。 我正在寻找的是像这样存储数据

     array (
  '_id' => 
  MongoId::__set_state(array(
     '$id' => '51ee1956d39c2c7e078d80da',
  )),
  'userid' => '12',
  'title' => 'Mongo',
  'edits' => 
  array (
    0 => 
    array (
      'html' => 'html>body>div:nth-child(2)>a>div>a>div',
      'path' => 'ssssss',
      'ci' => '1',
    ),
    1 => 
    array (
      'html' => 'html>body>div:nth-child(2)>a>div:nth-child(3)>a>h2',
      'path' => '/assets/img/demo/demo-avatar9604.jpg',
      'ci' => '2',
    ),
    2 => 
    array (
      'html' => ' html>body>div:nth-child(2)>a>div:nth-child(3)>a>center:nth-child(16)>a>h1',
      'path' => '333',
      'ci' => '3',
    ),
  ),
)

如果记录具有特定的组合,则仅更新评论数组'title' and 'userid'存在。如果不存在,将插入一条新记录


您从错误的类继承。要保存文档,您必须继承自EMongoDocument not EMongoEmbeddedDocument。这些类相似但目的不同。

  • EMongoEmbeddedDocument仅适用于嵌入文档,它应该仅用于嵌入文档
  • EMongoDocument延伸自EMongoEmbeddedDocument使用将数据实际保存到数据库的方法。

对于评论数组,您有两种选择:

  1. 使用普通的 php 数组 - 简单、不易维护、功率较小、容易出错..
  2. Use 嵌入文档数组 http://www.yiiframework.com/extension/yiimongodbsuite/#hh10- 每个评论都是文档,因此可以验证,具有严格的结构等。

默认情况下save/insert/update存储所有属性。对于部分更新,请使用以下组合$attributes并设置$modify为真。Warning:传递属性数组而不$modify将仅存储传递的属性,丢弃文档的其余部分。

public function save($runValidation = true, $attributes = null)
...
public function insert(array $attributes = null)
...
public function update(array $attributes = null, $modify = false)
...

所以在你的情况下你可以这样更新:

$model->update(array('comments'), true);

或者,如果您可以覆盖刚刚保存的整个文档:

$model->save();

Note:用于复合 pk 覆盖primaryKey():

public function primaryKey()
{
    return array('title', 'userid');
}

嗯,很好,stackoverflow 有草稿自动保存功能:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 yiimongodbsuite 中更新插入嵌入文档 的相关文章

  • php将多维数组内爆为制表符分隔行

    我有一个多维数组 BlockData 其中有 13 个维度和 n 个数组元素 我需要将此数组内爆回单个长字符串 其中元素由 n 换行和尺寸由 t tabs 我尝试过使用array map 功能没有成功 需要帮助来完成此任务 请帮忙 这可以使
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • 根据选择值显示/隐藏字段

    我试图根据我选择的字段之一的值显示和隐藏一些表单字段 我希望使用数组来保存每个选择值应该显示的内容和不应该显示的内容 以将我从大量的 switch 语句中拯救出来 但无法弄清楚如何做到这一点 我正在使用 PHP 和 jQuery 任何帮助都
  • PHP 和 MySQL - 高效处理多个一对多关系

    我正在寻求一些有关使用 MySQL 和 PHP 检索和显示数据的最佳方法的建议 我有 3 个表 所有一对多关系如下 Each SCHEDULE有很多覆盖每个覆盖都有很多地点 我想检索这些数据 以便它可以全部显示在单个 PHP 页面上 例如列
  • 在 React 应用程序中简单连接到 mongodb

    我使用 create react app 创建了简单的反应应用程序 这个应用程序包含表单 验证和引导程序 没有什么花哨的东西能像魅力一样发挥作用 我还注册了 mongo 以获得免费集群 以便我可以发送一些数据 所以我有这个网址 mongod
  • 是否存在可处理 PRC/.mobi 文件的 PHP 库?

    我正在写一个WordPress 插件 http github com chrisclarke eBook Export Plugin for WordPress以大多数主要电子书格式从选定类别创建电子书 我想支持 MobiPocket 因为
  • 如何在codeigniter中插入具有多个单选名称的单选按钮值?

    我正在尝试使用 codeigniter 进行在线测验 其中有一个针对某些主题的动态测验 用户可以在每个问题中添加问题和多项选择答案 我如何获得每个问题的每个多项选择答案中每个答案的值 p p
  • PHP 数组到 JavaScript 数组

    假设我在 php 中有这个数组 cities array Caracas gt array air gt array 4 3 5 Working Days Saturday sea gt array 18 3 5 Days Wednesda
  • PHP 的同义词库类或 API [编辑]

    TL DR 摘要 我需要一个命令行应用程序 我可以用它来获取同义词和其他相关单词 它需要是多语言的并且跨平台工作 任何人都可以为我推荐一个合适的程序 或者帮助我使用我已经找到的程序吗 谢谢 更长的版本 我的任务是用 PHP 编写一个系统 该
  • 如何判断是否ob_start();已经被调用了

    我使用输出缓冲进行 gzip 压缩并访问之前在 PHP 脚本中发布的内容 if ob start ob gzhandler ob start 现在 如果该脚本包含在另一个已使用 ob start 的脚本中 我会收到警告 警告 ob star
  • 如果 Row1 = 值 1,则更新其他行

    我有一个小的 php 脚本 用于访问 mySql 数据库 我想在数据库中插入新记录之前查看该数字 值 1 是否等于数据库中的记录 这也在第 1 行 所以我想 查看传入的电话号码是否等于数据库中的电话号码 如果是这样 则必须保持电话号码相同的
  • 多维数组内的移动

    我有一个用表格显示的数组 如何使用用户输入进行移动 目前 0 被分配给每个数组 但我计划为该数组分配其他值 我的问题是 如何使用用户输入在数组内向上 向下 向右 向左移动和对角移动 Array 0 gt Array 0 gt 0 1 gt
  • 在我的 php 网络服务器内副本中启用 mysqli

    正如这里所讨论的 mysqli 直接运行时有效 但通过 js ajax 运行时无效 https stackoverflow com questions 31523601 mysqli works when run directly but
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 如何使用 PHP 正确添加跨站请求伪造 (CSRF) 令牌

    我正在尝试为我网站上的表单添加一些安全性 其中一个表单使用 AJAX 另一个表单是简单的 联系我们 表单 我正在尝试添加 CSRF 令牌 我遇到的问题是令牌有时只显示在 HTML 值 中 其余时间 该值为空 这是我在 AJAX 表单上使用的
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • ORDER BY 字段内的 MySQL 子查询。 (没有内连接)

    有很多与此相关的问题 但都具有使用内部联接的相同答案 这 我认为 在这里是不可能的 如果我错了请告诉我 我现在正在做的是调用两个不同的 mysql 查询来获取结果 它工作完美 db gt query SELECT FROM meta WHE
  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛
  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph
  • 检查php中位字段是否打开的正确方法是什么

    检查位字段是否打开的正确方法是什么 在 php 中 我想检查来自 db mysql 的位字段是否打开 这是正确的方法吗 if bit 1 还有其他方法吗 我看到有人使用代码ord http jameslow com 2008 08 12 m

随机推荐

  • 如何在 Eclipse 调试视角中识别线程?

    我正在开发一个具有一些线程的 Java 应用程序 我在控制台中打印 threadId 例如 17 18 19 等 但是当我打开调试透视图时 我有这个 调试 窗口 最左上角的窗口 它显示当前线程 但它们使用 Thread 2 thread 3
  • 强化学习+优化:如何做得更好?

    我正在学习如何使用强化学习进行优化 我选择的问题是最大匹配 https en wikipedia org wiki Maximum cardinality matching在二分图中 因为我可以轻松计算出真正的最优值 回想一下 图中的匹配是
  • 从页面基类查找页面中的控件

    希望你周五过得愉快 好吧 这是我的问题 我的所有 ASPX 页面都继承自名为 BasePage 的基类 BasePage 继承自 System Web UI Page 现在 如何从我的页面库访问 设置我的 aspx 页面中的控件 我试过这个
  • 匹配完全限定类名的正则表达式

    在文本中匹配完全限定的 Java 类名的最佳方式是什么 例子 java lang Reflect java util ArrayList org hibernate Hibernate Java 完全限定类名 假设为 N 具有以下结构 N
  • DDD:用户聚合根与其他聚合中几乎所有实体之间的一对多关系

    我有以下 DDD 场景 分为以下聚合 User 各位朋友 用户协会 文件 供用户上传 画廊 文件分组 消息 用户通信 群组 用户可以创建并且其他成员可以加入 GroupMessages 发送给组中所有成员的消息 群组论坛 群组成员可以讨论各
  • 将额外参数添加到 $cordovaFileTransfer.upload

    我在用 cordovaFileTransfer upload 将图片从设备上传到我的服务器 在文档中它说它排除了这些参数 server filePath options 我需要传递一些额外的自定义参数 比如user id 例如 有谁知道是否
  • 从水晶报表中的路径加载动态图像

    我想在我的报告中显示图像 我将图像路径保存在我的 sqlserver 数据库中 现在我想从路径加载图像 我搜索整个互联网并尝试所有指导 我首先将图像插入到我的报告中 然后之后我去 gt Format Editor gt picture gt
  • Linux 中的独立 Python 应用程序

    如何在 Linux 中分发独立的 Python 应用程序 我想我可以理所当然地认为任何现代发行版中都存在最新的 Python 解释器 问题在于处理那些不属于标准库的库 即wxPython scipy python cryptographic
  • 内联定义函数与非内联函数有什么区别?

    我正在读这本书计算机程序的结构和实现 http mitpress mit edu sicp full text book book Z H 4 html在其中一章中 有一些代码用于计算数字的阶乘 define factorial n fac
  • 如何处理“表达式在检查错误后已更改”的特殊情况

    关于这个特定错误 有很多值得阅读的内容 以及一些适用于它所解决的特定实现的解决方案 我不知道它如何适用于我的 我正在根据 FormGroup 是否有效来更改材质扩展面板的背景颜色 我在某些 FormGroup 上有一些复选框表单控件 可以切
  • 如何在 Alexa 中使用带有意图确认的意图链?

    我正在尝试混合对话管理和意图链 我已禁用自动委派 但我被困在 当用户填写所有槽值时 我使用意图确认并提示他数据是否正确 如果用户说 否 我想出于同样的目的重新启动对话管理 但我得到的错误是 指令 Dialog Delegate 只能在对话框
  • Google Cloud Functions Java 11(测试版)运行时 - 性能问题

    我使用 Java 11 测试版 运行时创建了一个新的 Cloud Function 来处理静态站点的 HTML 表单提交 这是一个简单的 3 字段表单 姓名 电子邮件 消息 不涉及文件上传 该函数主要做两件事 使用 BitBucket 创建
  • Foreach 循环中的 PHP 引用对象

    假设我有这些课程 class Foo public data public function addObject obj this gt data objects obj class Bar public data public funct
  • “Docker On Windows”是否启动Linux虚拟机?

    我知道旧的 Docker Toolbox 使用 VirtualBox 为 Docker 运行一个最小的 Linux 虚拟机boot2docker http boot2docker io 这是一个最小的轻量级Linux操作系统 现在 随着新W
  • C++函数体中的常量变量

    我相信我已经理解了 但我只是想确认 如果我有两个功能 function A const Vector3D vectorA 1 0f function B float var const Vector3D vectorB 1 0f var 在
  • GTM 脚本后 dataLayer.push 不起作用

    我想使用 Google 跟踪代码管理器实施增强型电子商务 并且希望为标签 Universal Analytics 推送一些数据 我总是在 GTM 脚本之前创建 dataLayer 但现在我需要使用以下命令发送更多数据dataLayer pu
  • 处理 PDO::prepare() 添加的引号

    根据 PHP 文档 PDO prepare 为所有参数添加引号 这样您就不必担心这样做 准备好的语句的参数不需要加引号 驱动程序会自动处理此问题 如果应用程序专门使用准备好的语句 则开发人员可以确保不会发生 SQL 注入 但是 如果查询的其
  • 如何支持“按请求”范围

    我想从中间件获取用户令牌并将其注入控制器 这可能吗 class TaskController inject private currentUser Post tasks addTask if hasPermission currentUse
  • 在 MATLAB 中将绘制的数据与颜色和尺寸源链接起来

    这个问题与发布的问题相关here https stackoverflow com questions 45527467 visualizing large 3d dataset with scatter plot 其中我概述了我在仿真期间在
  • 在 yiimongodbsuite 中更新插入嵌入文档

    我需要在 yiimongodbsuite 中执行 upsert 命令 我试过 model new Murls model gt userid userid model gt title title model gt edits 0 new