我想将日期以JJ / MM / YYYY格式存储到这样的关联数组中:
'day' => $day,
'month' => $month,
'year' => $year
我已经很容易做到这一点,但是一旦我尝试将文档存储在集合中,日期就会像这样存储在文档中:
0 => $day
1 => $month
2 => $year
在“刷新”之前,我已经对该对象进行了PHP调试,它显示了与值相关的键,但是一旦在集合中,就已经用数字键重置了。
我的实体看起来像这样:
/**
* @MongoDB\Field(type="collection")
*/
private $date;
public function getDate()
{
return $this->date;
}
public function setDate($date)
{
$this->date = $date;
return $this;
}
和控制器部分:
$date = $movie->getDate();
$keys = array('day', 'month', 'year');
$values = explode('/', $date);
$dateArray = array_combine($keys, $values);
$movie->setDate($dateArray);
我想精确地说,我在Symfony 4上使用针对MongoDB的Doctrine ODM。
这是我的问题:
1)如何存储具有关联键的数组?
2) MongoDB文档中的密钥是否“固定”?我的意思是,我确定键0始终与$ day关联,而键1与$ month关联吗?
答案 0 :(得分:1)
您可以使用Doctrine ODM提供的EmbeddedDocument功能。
首先,您需要在AppBundle \ Document \ DateExample.php中创建EmbeddedDocument DateExample:
<?php
namespace AppBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\EmbeddedDocument()
*/
class DateExample
{
/**
* @MongoDB\Field(type="int")
*/
protected $day;
/**
* @MongoDB\Field(type="int")
*/
protected $month;
/**
* @MongoDB\Field(type="int")
*/
protected $year;
// getter and setter
}
然后,您可以在示例文档中使用DateExample。因此,Example.php文件将与此类似:
<?php
namespace AppBundle\Document;
use Doctrine\ODM\MongoDB\Mapping\Annotations as MongoDB;
/**
* @MongoDB\Document(repositoryClass="AppBundle\Repository\ExampleRepository")
*/
class Example
{
/** @MongoDB\EmbedOne(targetDocument="DateExample") */
private $date;
// ...
}
和控制器部分:
$date_example = new DateExample();
$date_example->setDay(21);
$date_example->setMonth(05);
$date_example->setYear(2019);
$example = new Example();
$example->setDate($date_example);
// ...
答案 1 :(得分:1)
您需要使用hash
type:
hash
:与MongoDB对象的关联数组
collection
:数字索引数组到MongoDB数组
/**
* @MongoDB\Field(type="hash")
*/
private $date;