How to create entity with Symfony2
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.
Related videos on Youtube
acubens
Updated on July 09, 2022Comments
-
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 about 13 yearsIf 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 about 13 yearsThank 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 about 13 yearsFor me it says : [InvalidArgumentException] The parameter "doctrine.orm.default_entity_manager" must be defined.
-
jihi almost 13 yearsnow you can also put all the mapping in mapping.orm.yml in HelloBundle/Resources/config/doctrine
-
ealbert over 10 yearsI 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.