How to create entity with Symfony2

44,843

Solution 1

My solutions (i don't know if it's good, best practice!?)

YML

Create "Entities.User.dcm.yml" file in HelloBundle/Resources/config/doctrine/metadata/orm with this code (by example):

Entities\User:
  type: entity
  table: users
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    name:
      type: string
      length: 50

Then

php app/console doctrine:mapping:import "HelloBundle" yml

php app/console doctrine:generate:entities "HelloBundle"

Then, you can test it in your controller with:

$user = new \Sensio\HelloBundle\Entity\User;
$user->setName('Acubens');
$em = $this->get('doctrine.orm.entity_manager');
$em->persist($user);
$em->flush();

or with PHP

Create "User.php" file in HelloBundle\Entity with this code

// Sensio/HelloBundle/Entity/User.php
namespace Sensio\HelloBundle\Entity;

/**
 * @orm:Entity
 */
class User
{
    /**
     * @orm:Id
     * @orm:Column(type="integer")
     * @orm:GeneratedValue(strategy="IDENTITY")
     */
    protected $id;

    /**
     * @orm:Column(type="string", length="255")
     */
    protected $name;
}

Then

php app/console doctrine:mapping:import "HelloBundle"

this will generate in "HelloBundle/Resources/config/doctrine/metadata/orm"

<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
  <entity name="Sensio\HelloBundle\Entity\User" table="user">
    <change-tracking-policy>DEFERRED_IMPLICIT</change-tracking-policy>
    <id name="id" type="integer" column="id">
      <generator strategy="IDENTITY"/>
    </id>
    <field name="name" type="string" column="name" length="255"/>
    <lifecycle-callbacks/>
  </entity>
</doctrine-mapping>

Then delete User.php

php app/console doctrine:generate:entities "HelloBundle"

After you have a new nice file User.php

<?php

namespace Sensio\HelloBundle\Entity;

/**
 * Sensio\HelloBundle\Entity\User
 */
class User
{
    /**
     * @var string $name
     */
    private $name;

    /**
     * @var integer $id
     */
    private $id;


    /**
     * Set name
     *
     * @param string $name
     */
    public function setName($name)
    {
        $this->name = $name;
    }

    /**
     * Get name
     *
     * @return string $name
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Get id
     *
     * @return integer $id
     */
    public function getId()
    {
        return $this->id;
    }
}

And you how do you do? Why i must specify HelloBundle in my commands?

ps: my config.yml

doctrine.dbal:
    driver:   pdo_mysql
    dbname:   sf2
    user:     root
    password: 
    logging:  %kernel.debug%
doctrine.orm:
    auto_generate_proxy_classes: %kernel.debug%
    mappings:
        HelloBundle: ~

Solution 2

If you're using YML annotation to generate your schema you could have this:

Namespace\NameBundle\Entity\Build:
  type: entity
  repositoryClass: Namespace\NameBundle\Entity\Repository\BuildRepository
  ...

when using the command line app/console doctrine:generate:entities NamespaceNameBundle This would generate your entity and repository class automatically

Solution 3

http://docs.symfony-reloaded.org/guides/doctrine/orm/index.html

This section should have all the information you need.

Although Symfony2 is in stabilization stage now, the latest PR6 release still have lots of features missing and most likely things will change at RC1 version. Dont be afraid to dive into the code and figure things out yourself.

Solution 4

I've been searching for a solution using YML mapping, as it's nowhere to be found within the book. After chiling aroung a bit, I've found that your mappings should follow these rules:

  • the file has to be placed at src/YourAppName/YourBundleName/Resources/config/doctrine/EntityName.orm.yml
  • the entity class name should be full (eg: YourAppName\YourBundleName\Entity\EntityName

I hope this helps.

Share:
44,843

Related videos on Youtube

acubens
Author by

acubens

Updated on July 09, 2022

Comments

  • acubens
    acubens almost 2 years

    My general question is how to create entities and repositories with symfony2?

    • How to create entity/repository with a schema.yml with doctrine orm? Where i must save schema.yml file? What are the commands to type in the console?
    • I create a class entity without schema.yml what to do after? Command!?
    • Where i must save my entity/repository file when entity is general for all the project or specific to a bundle?
    • richsage
      richsage about 13 years
      If you want to persist with Symfony2, the documentation at docs.symfony-reloaded.org should be enough to get you started, including persisting objects to the database and folder structure. If you're having trouble with this, then Dan's answer is the way forward. Tried & tested :-)
    • acubens
      acubens about 13 years
      Thank for your comments! I use symfony1.4 all the days...I just want to try and understand this new version (stable will come very soon) but i find switching to sf2 is little bit destabilizing. I'm sure i'm not the only! I continue my tests...
  • umpirsky
    umpirsky about 13 years
    For me it says : [InvalidArgumentException] The parameter "doctrine.orm.default_entity_manager" must be defined.
  • jihi
    jihi almost 13 years
    now you can also put all the mapping in mapping.orm.yml in HelloBundle/Resources/config/doctrine
  • ealbert
    ealbert over 10 years
    I found the following link useful: symfony.com/doc/current/cookbook/doctrine/… When I tried to follow the steps within the post I encountered few problems.

Related