acubens
acubens

Reputation: 472

How to create entity with Symfony2

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

Upvotes: 15

Views: 45215

Answers (5)

wenders
wenders

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

Nikola Petkanski
Nikola Petkanski

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:

  • 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.

Upvotes: 1

acubens
acubens

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

Hakan Deryal
Hakan Deryal

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

dxb
dxb

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

Related Questions