Yassi
Yassi

Reputation: 2529

Doctrine model array data type

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

Answers (1)

Timurib
Timurib

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

Related Questions