标签: doctrine-odm

Doctrine ODM - 类似于运算符语法

我将如何在doctrine odm中从SQL模拟类似运算符?

用例:我想在变量$ search中找到字段字幕字符串中的某个主题.

查询怎么样?

谢谢你的所有答案

php mongodb doctrine-odm sql-like

6
推荐指数
1
解决办法
3756
查看次数

MongoDB/doctrine:无法嵌套$或$和

我在操作中嵌套多个双操作数$or操作时遇到了麻烦$and.这个讨论的结论听起来和我需要的相似,但是我无法让它发挥作用.这是我正在尝试做的JavaScript:

db.Business.find(
  {
    $and:
      [
        { $or: [{nm: /American/}, {dsc: /American/}] },
        { $or: [{nm: /Mega/}, {dsc: /Mega/}] }
      ]
  }
)
Run Code Online (Sandbox Code Playgroud)

这适用于MongoDB交互式shell.

这里有一些PHP对我来说没问题,但不起作用(导致无限递归,如下所示):

$q = $doctrineOdm->createQueryBuilder('Business');
foreach (array('American','Mega') as $keyword) {
  $r = new \MongoRegex('/'.$keyword.'/i');
  $q->addAnd(
    $q->addOr($q->expr()->field('nm')->equals($r))
      ->addOr($q->expr()->field('dsc')->equals($r))
  );
}
print_r($q->getQuery()->getQuery()); // infinite recursion
$cursor = $q->getQuery()->execute();
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

在这里交叉.

php doctrine mongodb doctrine-odm

6
推荐指数
1
解决办法
4293
查看次数

如何在Doctrine MongoDB ODM中删除多个文档

如何在doctrine mongodb odm中删除多个文档?在PHP类中,我应该可以使用以下代码来完成它:

 $db->collection->remove(array("age" => 18));
Run Code Online (Sandbox Code Playgroud)

我怎么能在教义mongo odm中做到这一点?

mongodb doctrine-odm

6
推荐指数
1
解决办法
6536
查看次数

Doctrine2 Entites - 是否可以将"脏"对象与数据库中的对象进行比较

是否可以比较当前"脏"版本(具有某些属性已更改但尚未保留的对象)与"原始"版本(数据仍在数据库中)之间的实体对象的状态.

我的假设是我可能有一个"脏"的对象,然后从数据库中提取一个新的对象并比较两者.例如:

$entity = $em->getRepository('MyContentBundle:DynamicContent')->find($id);

$editForm = $this->createContentForm($entity);
$editForm->bind($request);

if ($editForm->isValid()) {
    $db_entity = $em->getRepository('MyContentBundle:DynamicContent')->find($id);

    // compare $entity to $db_entity

    $em->persist($entity);
    $em->flush();

    return $this->redirect($this->generateUrl('content_edit', array('id' => $id)));
}
Run Code Online (Sandbox Code Playgroud)

但根据我的经验,$ entity和$ db_entity始终是相同的对象(并且在$ request bind形式之后具有与$ entity相同的数据).有没有办法得到一个新的版本的$实体和"脏"版本为了比较的缘故?我见过的解决方案都会在表单绑定发生之前提取所需的数据,但我宁愿没有这个限制.

更新:为了澄清,我不仅要查看实体属性的更改,还要查看其相关的实体集合.

php symfony doctrine-orm doctrine-odm

6
推荐指数
2
解决办法
8551
查看次数

Doctrine ODM和无架构设计

继续我关于EAV的问题,我正在考虑使用MongoDB来存储产品属性.

我将使用MongoDB(或其他文档数据库)存储此应用程序的目录部分 - 类别,产品及其所有相关信息.

我的问题是,当使用ODM时,每个实体都有一个模式,它基本上忽略了使用NoSQL数据库的无模式优势,不是吗?

如果这是正确的,为什么有人会使用ODM?

编辑:我发现了一个相关的问题,我可以使用哈希实现产品属性功能吗?

mongodb nosql mongomapper doctrine-orm doctrine-odm

5
推荐指数
1
解决办法
2531
查看次数

当代理找不到参考文件时,如何抑制MongoDDException

我们正在使用Symfony2 / DoctrineOdm / MongoDB,并且在执行以下操作时:

if ($doc.referenceOne != null) { ... }

$doc.referenceOne包含MongoDbRef点到已删除/丢失的文件,这个学说代理对象提出了MongoDBException。

可以告诉Proxy返回null而不是引发异常?


详细说明:

我们的文件:

class User {
    /* @MongoDB\ReferenceOne( ... ) */
    private $photo;
}
Run Code Online (Sandbox Code Playgroud)

如果$ photo包含MongoDbRef,但是文档丢失/删除,

当我们if ($user.photo) { ... }教义时会引发MongoDBException:

The "Proxies\DocumentPhotoProxy" document with identifier "4fd8b3ef732bafab7b000000" could not be found
Run Code Online (Sandbox Code Playgroud)

我们想抑制异常,因为我们的应用程序可以处理该变量中的空值。

(我们可以简单地记录该错误,而异常会传播到500页并中断我们的服务)

doctrine-odm

5
推荐指数
1
解决办法
2083
查看次数

Zend Framework 2 + Doctrine ODM,"在链配置的命名空间中找不到类"错误?

设置ZF2 + ODM时,我收到以下错误:

The class 'Application\Document\User' was not found in the chain configured namespaces 
Run Code Online (Sandbox Code Playgroud)

当前设置如下:

ZF2稳定,通过composer.phar安装了学说ODM,其内容为composer.json

{
    "name": "zendframework/skeleton-application",
    "description": "Skeleton Application for ZF2",
    "license": "BSD-3-Clause",
    "keywords": [
        "framework",
        "zf2"
    ],
    "homepage": "http://framework.zend.com/",
    "minimum-stability": "dev",
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": "2.0.0",
        "doctrine/doctrine-mongo-odm-module": "dev-master"
    }
}
Run Code Online (Sandbox Code Playgroud)

加载模块

'modules' => array(
    'Application',
    'DoctrineModule',
    'DoctrineMongoODMModule',
),
Run Code Online (Sandbox Code Playgroud)

建立了水化器和代理dirs

$ ls -l data/DoctrineMongoODMModule/
total 0
drwxrwxrwx  2 wisu  staff  68 Sep 12 08:34 Hydrators
drwxrwxrwx  2 wisu  staff  68 Sep 12 08:35 Proxy
Run Code Online (Sandbox Code Playgroud)

odm配置看起来像

'driver' …
Run Code Online (Sandbox Code Playgroud)

mongodb doctrine-orm odm doctrine-odm zend-framework2

5
推荐指数
1
解决办法
9134
查看次数

通过作曲家的教义mongodb安装错误

我正在尝试通过我的本地计算机上的Zend Framework 2的作曲家安装Doctrine MongoDB ODM 模块,但我一直收到一条错误,指出我的计算机缺少PHP扩展芒果.我正在安装安装了WAMP 2.2的Windows 7 x64.我最初安装了1.3.1 mongodb php驱动程序.但是,我发现MongoDB ODM不支持这个驱动程序,所以我降级到1.2.12.我再次尝试安装后,我不断收到同样的错误:

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - doctrine/mongodb 1.0.0-BETA3 requires ext-mongo >=1.3.1,<1.4-dev -> the re
quested PHP extension mongo is missing from your system.
    - doctrine/mongodb 1.0.0-BETA2 requires ext-mongo >=1.2.12,<1.3-dev -> the r
equested PHP extension mongo is missing from your system.
    - doctrine/mongodb 1.0.0-BETA1 requires ext-mongo * -> the requested PHP ext
ension mongo is missing …
Run Code Online (Sandbox Code Playgroud)

php mongodb doctrine-odm zend-framework2 composer-php

5
推荐指数
1
解决办法
4843
查看次数

使用Doctrine的MongoDB ODM - 如何通过嵌入文档的字段查找文档?

我有以下文件:

  • 一份User文件.
  • 嵌入式文档,包含对(参见下一文档)的引用
  • 一份Site文件

每个用户都有嵌入文档的内部数组,每个代表他遵循着一个项目-一个网站,一个Twitter帐户-与选项标记特定类别的他感兴趣的每一嵌入文档具有第三文件的引用-该Site文件(或Twitter文件等.).

问题是-使用MongoDB的ODM,我怎么能得到所有选择跟随某个网站上的用户的文件,使用该网站的ID?
(见下文(在文件之后)如何在mongodb shell中完成)

user.php的

<?php
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;

/**
 * @ODM\Document
 */

class User {
    /**
     * @ODM\Id
     * @var string
     */
    protected $id;

    /**
     * @ODM\EmbedMany(
     *      discriminatorMap={
     *          "site"="SiteFollow",
     *          "twitter"="TwitterFollow",
     *      }
     *  )
     * @var ArrayCollection;
     */
    protected $follows;
}
Run Code Online (Sandbox Code Playgroud)

SiteFollow.php

<?php
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;

/**
 * @ODM\EmbeddedDocument
 */

class SiteFollow {
    /**
     * @ODM\Collection
     * @var array
     */
    protected $interestingCategories; …
Run Code Online (Sandbox Code Playgroud)

php doctrine mongodb doctrine-orm doctrine-odm

5
推荐指数
2
解决办法
5736
查看次数

基于对缓存对象的引用来查询文档

我有两种类型的对象UserCompany其数据存储在MongoDB集合user和中companyUser包含对的引用Company。我可以在UserRepository中使用以下代码查询用户:

$this
  ->createQueryBuilder()
  ->field('employer')->references($company);
Run Code Online (Sandbox Code Playgroud)

Company但是,它是一个使用率很高的对象,使用Redis进行缓存。当不存在缓存时,一切正常。但是当从缓存中获取公司实例时。教义的工作单元不了解实例。因此,执行上面的代码将导致以下错误:

Cannot create a DBRef for class App\Document\Company without an identifier. Have you forgotten to persist/merge the document first?
Run Code Online (Sandbox Code Playgroud)

我发现从Redis提取公司信息后,我可以使用黑客将该公司注册到该工作部门:

$company = $this->fetchFromCache($params);
$documentManager->getUnitOfWork()->registerManaged($company, $company->getId(), []);
Run Code Online (Sandbox Code Playgroud)

但是,这看起来很丑。有没有一种方法可以查询用户而不必让Doctrine知道Company对象或更改我的数据模型?

php doctrine doctrine-odm

5
推荐指数
1
解决办法
104
查看次数