标签: doctrine-odm

问题是持久嵌套的嵌套嵌入式文档

更新:非常肯定这是一个错误,在Jira上发了一个问题:http
: //bit.ly/gpstW9 更新(2011年5月5日):根据jwage的推荐,我已经切换到类别和帖子之间的参考关系(而不是嵌入式).

我正在使用最新版本的Doctrine ODM(Git新增).

我有三个层次的文件(两个嵌入式); 类别 - > EmbedsMany:Post - > EmbedsMany PostVersion.

PostVersion由Post自动处理.当我发布一个新帖子时,它实际上也是一个新的PostVersion.

我的问题是Doctrine与PostVersions混淆,如果我检索现有的Category并添加一个新帖子,新Post的PostVersions会添加到Category的$ posts集合中的第一个Post.

一步步:

  1. 制作一个新帖子(Post1)和类别
  2. 将Post1添加到类别
  3. 坚持类别,同花顺,清除
  4. 检索类别
  5. 发一个新帖子(Post2)
  6. 将Post2添加到类别
  7. 红晕

在数据库的这个阶段,应该有一个类别,两个帖子,每个帖子都有一个PostVersion.然而,实际发生的是有一个类别,两个帖子,第一个帖子有两个PostVersions,第二个Post有零PostVersions.

请求期间的文档本身是正确的,它只是希望持久化到错误的数据库.我错过了什么?

预期结果:

{
  "_id": ObjectId("4da66baa6dd08df1f6000001"),
  "name": "The Category",
  "posts": [
    {
      "_id": ObjectId("4da66baa6dd08df1f6000002"),
      "activeVersionIndex": 0,
      "versions": [
        {
          "_id": ObjectId("4da66baa6dd08df1f6000003"),
          "name": "One Post",
          "content": "One Content",
          "metaDescription": null,
          "isAutosave": false,
          "createdAt": "Thu, 14 Apr 2011 13:36:10 +1000",
          "createdBy": "Cobby"
        }
      ]
    },
    {
      "_id": ObjectId("4da66baa6dd08df1f6000004"),
      "activeVersionIndex": 0
      "versions": [
        { …
Run Code Online (Sandbox Code Playgroud)

php mongodb doctrine-orm doctrine-odm

7
推荐指数
1
解决办法
1636
查看次数

如何强制Doctrine MongoDB ODM文档代理转换为"原始"文档?

我在文档User中引用了一个文档Person.当我检索User时,它没有嵌入Person对象,而是Person代理对象.有没有办法"强制"代理成为"完整"文档(所以Person proxy => Person).

我已经尝试调用一个方法来检索其他数据(因此__load被触发,但对象仍然是'代理'版本.

我希望有人能够比ODM的文件更能说清楚这一点.

php mongodb doctrine-odm

7
推荐指数
1
解决办法
2744
查看次数

绑定来自doctrine2 ODM的Zend2表单数据

除了使用之外,还有更好的方法将doctrine2 ODM实体类中的数据绑定到Zend2表单bind()吗?

如果是这样,会是什么?我只是将数据检索为数组并传递每个字段吗?我正在努力解决这个问题,并且最有可能使它变得比它需要的更难.

当我调用该bind()函数时,它会输出一个引用默认水化器的Zend错误.我是否需要在我的实体类中做一些特别的事情?

编辑:以下是Zend投掷的确切错误

〜\厂商\ zendframework\zendframework \库\ Zend的\ STDLIB \保湿\ ArraySerializable.php:35

Zend\Stdlib\Hydrator\ArraySerializable :: extract期望提供的对象实现getArrayCopy()

他们让我认为我需要:

  1. 使用Zends水化器(我必须研究如何实施)或
  2. 使用doctrine2的水化器(我也必须找出实施的最佳方法)

doctrine-odm zend-framework2

7
推荐指数
1
解决办法
7715
查看次数

Doctrine MongoDB - 有没有办法从JSON构建查询?

我有一个任意MongoDB JSON查找查询字符串,例如:

{ "address.city": "Seattle"}
Run Code Online (Sandbox Code Playgroud)

要么

{ qty: { $gt: 5, $lt: 50 }
Run Code Online (Sandbox Code Playgroud)

是否有任何现有方法从JSON字符串创建Doctrine.MongoDB.Query对象?或者直接查询mongo然后将这些结果传递给学说进行补水?

doctrine mongodb symfony doctrine-odm doctrine-mongodb

7
推荐指数
1
解决办法
437
查看次数

如何在zf2中使用用户名不区分大小写

我在我的项目中使用zf2身份验证验证用户.我在我的用户表中将Harib保存为用户名,但如果我使用我的用户名Harib然后接​​受或者如果我使用harib然后它不接受,我想删除用户的区分大小写这个名字让Harib或harib访问我如何解决这个问题?

这是我的代码:

public function loginAction()
{
    $this->layout('layout/login-layout.phtml');
    $login_error = false;
    $loginForm = new LoginForm();
    $form_elements = json_encode($loginForm->form_elements);
    if ($this->request->isPost()) {
        $post = $this->request->getPost();
        $loginForm->setData($post);
        if ($loginForm->isValid()) {
            $hashed_string = '';
            if(
                array_key_exists('hashed_input' , $post) &&
                $post['hashed_input'] != '' &&
                strpos(urldecode($this->params('redirect')) , 'programdetailrequest') !== false
            ) {
                $hashed_string = $post['hashed_input'];
            }
            $data = $loginForm->getData();
            $authService = $this->getServiceLocator()->get('doctrine.authenticationservice.odm_default');
            $adapter = $authService->getAdapter();
            $adapter->setIdentityValue($data['username']);
            $adapter->setCredentialValue(md5($data['password']));
            $authResult = $authService->authenticate();
            if($authResult->isValid()){
                $identity = $authResult->getIdentity();
                if( is_object($identity) && method_exists($identity, 'getData') ){
                    $user_data = $identity->getData();
                    $authService->getStorage()->write($identity);
                    // for …
Run Code Online (Sandbox Code Playgroud)

php authentication doctrine-orm doctrine-odm zend-framework2

7
推荐指数
1
解决办法
314
查看次数

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
查看次数

如何将ZF2与Doctrine Mongo ODM集成?

我正在尝试将zf2 beta3与doctrine mongo odm(https://github.com/doctrine/DoctrineMongoODMModule)集成,但没有成功.

我该如何安装和配置它?

doctrine zend-framework doctrine-orm doctrine-odm zend-framework2

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

如何更新Doctrine MongoDB中的嵌入式文档?

我有一个嵌入了文档的文档.当我第一次创建一个对象时,一切正常,但是当我尝试更新文档时,嵌入的文档不会更新.

/** @MongoDB\Document */
class DocumentA
{
    /** @MongoDB\EmbedOne(targetDocument="DocumentB") **/
    protected $docB;

    /** @MongoDB\String */
    protected $valueA;
}

/** @MongoDB\EmbeddedDocument */
class DocumentB
{
    /** @MongoDB\String */
    protected $valueB;
}
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,我查询文档,更新值并将它们保存到数据存储中.

// Variant A – Does not work
$document = ... // find from data store
$document->setValueA('Hello World');
$document->getDocB()->setValueB('foo baz');

$om->persist($document);
$om->flush();
Run Code Online (Sandbox Code Playgroud)

如果我不更新嵌入式文档,但设置一个新文件一切正常:

// Variant B - Does work
$document = ... // find from data store
$document->setValueB('Hello World 2');
$document->setDocB(new DocumentB());
$document->getDocB()->setValueB('foo baz 2');

$om->persist($document);
$om->flush();
Run Code Online (Sandbox Code Playgroud)

正如我所说,变体B的工作正常.但是,在我的应用程序中,文档更复杂,每次我必须更新它时,为嵌入式文档创建一个新对象是不切实际的.有没有一种方法可以告诉Doctrine ODM查看嵌入式文档的值以决定是否应该更新它?

php doctrine mongodb doctrine-odm

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

MongoException:不允许使用零长度键,是否使用带双引号的$?

我正在使用symfony2和mongodb,直到今天,一切正常,但是我创建了一个新文档,突然出现了这个错误:

"MongoException:不允许使用零长度键,你是否使用带双引号的$?"

$dm = $this->get('doctrine.odm.mongodb.document_manager');
$_repo = $dm->getRepository('CantaoCustomerBundle:CustomerTags');
$_repo->findOneByCustomer($customer);
Run Code Online (Sandbox Code Playgroud)

$customer它的确定,资源库是空的,我的文档类是这样的:

    /**
     * @MongoDB\ID
     **/
    private $id;

    /** 
     * @MongoDB\ReferenceOne(targetDocument="Tapronto\Mats\ProductBundle\Document\Tag", cascade={"persist"})
     **/
    private $tag;

    /**
     * @MongoDB\ReferenceOne(targetDocument="Tapronto\Mats\CustomerBundle\Document\Customer", cascade={"persist"})
     **/
    private $customer;

    /**
     * @MongoDB\Float
     **/
    private $points;

    /**
     * @MongoDB\Int
     **/
    private $viewed;

    /**
     * @MongoDB\Int
     **/
    private $brought;

    /**
     * @MongoDB\Int
     **/
    private $favorited;

    /**
     * @MongoDB\Date
     * @Gedmo\Timestampable(on="create")
     **/
    private $createdAt;

    /**
     * @MongoDB\Date
     * @Gedmo\Timestampable(on="update")
     **/
    private $updatedAt;
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我,有一些想法,我尝试了一切,似乎没有任何工作

mongodb symfony doctrine-odm

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

PHP 7与Doctrine MongoDB ODM

我有一个使用Doctrine MongoDB ODM的Symfony 2应用程序,我正在尝试使用PHP 7运行它.

我已经成功安装了PHP 7,但是通过Composer安装依赖项让我感到悲伤,出现以下错误:

doctrine/mongodb 1.0.x-dev requires ext-mongo >=1.2.12,<1.7-dev -> the requested PHP extension mongo is missing from your system.
Run Code Online (Sandbox Code Playgroud)

我设法通过apt安装PHP 7 mongo扩展:

apt-get install php7.0-mongo
Run Code Online (Sandbox Code Playgroud)

为了确定,我还mongodb通过PECL 安装了扩展:

sudo apt-get install -y php-pear php7.0-dev libcurl3-openssl-dev
sudo pecl install mongodb
Run Code Online (Sandbox Code Playgroud)

但是,我仍然得到无法找到mongo扩展名的错误.似乎存在版本差异,ext-mongo >=1.2.12但只是1.1.6安装了::

$ php -i | grep mongo
/etc/php/7.0/cli/conf.d/20-mongodb.ini,
mongodb
mongodb support => enabled
mongodb version => 1.1.6
mongodb stability => stable
libmongoc version => 1.3.5
mongodb.debug => no value => no …
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-odm composer-php php-7

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