Skip to content

Instantly share code, notes, and snippets.

@index0h
Last active March 1, 2016 21:10
Show Gist options
  • Save index0h/cadac134cd2e535e2916 to your computer and use it in GitHub Desktop.
Save index0h/cadac134cd2e535e2916 to your computer and use it in GitHub Desktop.
symfony_example
services:
account_repository:
class: MY\AppBundle\Repository\AccountRepository
factory: ["@doctrine", getRepository]
arguments:
- MY\AppBundle\Entity\Account
<?php
namespace MY\AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(
* name="account",
* indexes={
* @ORM\Index(
* name="createdAt",
* columns={"createdAt"}
* )
* }
* )
* @ORM\Entity(repositoryClass="MY\AppBundle\Repository\AccountRepository")
*/
class Account
{
/**
* @var int
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var \DateTime
* @ORM\Column(name="createdAt", type="datetime", nullable=false)
*/
private $createdAt;
/**
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return \DateTimeImmutable
*/
public function getCreatedAt()
{
return $this->createdAt;
}
/**
* @param \DateTime $createdAt
* @return $this
*/
public function setCreatedAt(\DateTime $createdAt)
{
$this->createdAt = $createdAt;
return $this;
}
}
<?php
namespace MY\AppBundle\Repository;
use Doctrine\ORM\EntityRepository;
class AccountRepository extends EntityRepository
{
}
CREATE TABLE IF NOT EXISTS `balance` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`createdAt` TIMESTAMP NOT NULL,
PRIMARY KEY (`id`),
INDEX `createdAt` (`createdAt` ASC)
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
@index0h
Copy link
Author

index0h commented Mar 1, 2016

см. http://symfony.com/doc/current/book/doctrine.html#add-mapping-information

Далее в контроллерах например можешь дергать репозиторий так:

$this->get('account_repository')->find($someId);

или так

$this->getDoctrine()->getRepository('AppBundle:Account')->find($someId);

С Entity работаем следующим образом:

// Создаем сущность и заполняем ее
$account = (new Account())
    ->setCreatedAt(new \DateTime());

// Получаем менеджер сущностей
$entityManager = $this->getDoctrine()->getManager();

// Записываем сущность в EM. Теперь доктрина знает об этом аккаунте.
$entityManager->persist($account);

// Синхронизируем БД. В этот момент доктрина сама решает, что было создано, что обновлено,
// что удалено и выполняет запросы к БД.
$entityManager->flush();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment