Reputation: 472
My general question is how to create entities and repositories with symfony2?
Upvotes: 15
Views: 45215
Reputation: 76
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
Upvotes: 2
Reputation: 4794
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:
I hope this helps.
Upvotes: 1
Reputation: 472
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: ~
Upvotes: 15
Reputation: 2903
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.
Upvotes: 1
Reputation: 931
I think that you must choose between class creation or yml configuration. If you create a entity class and the config yml file, and then execute doctrine:generate:entities You have an error. I recommand to you to stuck with class style with anotations, and then use $ php app/console doctrine:database:create $ php app/console doctrine:schema:create
Upvotes: 0