Reputation: 2529
I am new to Doctrine and I am trying to make a MongoDb Model/Collection. I have a field languages
which should be array. Array like this:
$var = [
array("fname"=>"test","lname"=>"test"),
array("fname"=>"test","lname"=>"test"),
array("fname"=>"test","lname"=>"test"),
];
But it seems my type declaration is not working. I have:
<?php
namespace RemoteStaff\Documents;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
/**
* Class CandidateAsl
* @package RemoteStaff\Documents
* @ODM\Document(db="prod", collection="candidates_asl")
*/
class CandidateAsl
{
/**
* Constructor class
*/
public function __construct(){
$this->languages = new ArrayCollection();
}
/**
* @var String
* @ODM\Id(strategy="AUTO", type="string")
*/
protected $_id;
/**
* @var string
* @ODM\Field(type="string", name="gender")
*/
private $gender;
/**
* @var \DateTime
* @ODM\Field(type="date", name="birthdate")
*/
private $birthdate;
/**
* @var string
* @ODM\Field(type="string", name="nationality")
*/
private $nationality;
/**
* @var string
* @ODM\Field(type="string", name="permanentAddress")
*/
private $permanentAddress;
/**
* @var \Doctrine\Common\Collections\ArrayCollection
*/
private $languages = [];
}
How do I declare or setup array fields in doctrine model?
I've read the documentation http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html and tried
/**
* @var array
* @ODM\Field(type="array", name="languages")
*/
private $languages = [];
/**
* @return mixed
*/
public function getLanguages()
{
return $this->languages;
}
/**
* @param mixed $languages
*/
public function setLanguages($languages)
{
$this->languages = $languages;
}
And I am getting Invalid type specified "array".
Upvotes: 2
Views: 3524
Reputation: 2743
MongoDB ODM doesn't support an array
field type. Use hash
or collection
instead.
From documentation:
collection
: numerically indexed array to MongoDB array
hash
: associative array to MongoDB object
Upvotes: 3