Archives mensuelles : mars 2012

Symfony2 service + manager

Resources/config/services.xml

<?xml version="1.0" ?>
 
<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
 
    <parameters>
        <parameter key="main_publisher.game.manager.class">Main\PublisherBundle\Manager\GameManager</parameter>
    </parameters>
 
    <services>
        <service id="main_publisher.game.manager" class="%main_publisher.game.manager.class%">
            <argument type="service" id="doctrine.orm.entity_manager" />
        </service>
    </services>
</container>

Manager/BaseManager.php

<?php
namespace Main\PublisherBundle\Manager;
 
class BaseManager {
 
    protected function persistAndFlush($entity) {
        $this->_em->persist($entity);
        $this->_em->flush();
    }
 
}

Manager/GameManager.php

<?php
namespace Main\PublisherBundle\Manager;
 
use Doctrine\ORM\EntityManager;
use Main\PublisherBundle\Manager\BaseManager;
use Main\PublisherBundle\Entity\Game;
 
class GameManager extends BaseManager {
    protected $_em;
 
    public function __construct(EntityManager $em) {
        $this->_em = $em;
    } 
 
    public function save(Game $game) {
        return $this->persistAndFlush($game);
    }
 
    public function getRepository() {
        return $this->_em->getRepository('MainPublisherBundle:Game');
    }
}

Controller/GamesController.php

<?php
 
namespace Main\PublisherBundle\Controller;
 
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
 
use Main\PublisherBundle\Entity\Game;
use Main\PublisherBundle\Form\GameType;
 
class GamesController extends Controller
{
    public function newAction(Request $request) {
        $form = $this->createForm(new GameType(), new Game());
        if($request->getMethod() == 'POST') {
            $form->bindRequest($request);
            if($form->isValid()) {
                $game = $form->getData();
                $manager = $this->container->get('main_publisher.game.manager');
                $manager->save($game);
                return $this->redirect($this->get('router')->generate('homepage'));
            }
 
        }
        return $this->render('MainPublisherBundle:Games:new.html.twig',
            array('form' => $form->createView()));
    }
}

Mysql subquery

Database

CREATE TABLE IF NOT EXISTS `author` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
 
INSERT INTO `author` (`id`, `name`) VALUES
(1, 'HiO'),
(2, 'Blu'),
(3, 'Pouet');
 
CREATE TABLE IF NOT EXISTS `post` (
  `a_id` INT(10) UNSIGNED DEFAULT NULL,
  `title` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
INSERT INTO `post` (`a_id`, `title`) VALUES
(1, 'My name is HiO :)'),
(NULL, 'I am an anonymous :)'),
(2, 'My name is Blu :D'),
(3, 'My name is Pouet ><''');

Subquery

SELECT *, (SELECT COUNT(post.a_id) FROM post WHERE post.a_id = author.id) AS post_count FROM `author`

Result

$author = array(
  array('id'=>'1','name'=>'HiO','post_count'=>'1'),
  array('id'=>'2','name'=>'Blu','post_count'=>'1'),
  array('id'=>'3','name'=>'Pouet','post_count'=>'1')
);

Subquery in where clause

SELECT * FROM `post` WHERE a_id IN (SELECT id FROM author)

Result

$post = array(
  array('a_id'=>'1','title'=>'My name is HiO :)'),
  array('a_id'=>'2','title'=>'My name is Blu :D'),
  array('a_id'=>'3','title'=>'My name is Pouet ><\'')
);

Mysql join

Database

CREATE TABLE IF NOT EXISTS `author` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
 
INSERT INTO `author` (`id`, `name`) VALUES
(1, 'HiO'),
(2, 'Blu'),
(3, 'Pouet');
 
CREATE TABLE IF NOT EXISTS `post` (
  `a_id` INT(10) UNSIGNED DEFAULT NULL,
  `title` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
INSERT INTO `post` (`a_id`, `title`) VALUES
(1, 'My name is HiO :)'),
(NULL, 'I am an anonymous :)'),
(2, 'My name is Blu :D'),
(3, 'My name is Pouet ><''');

INNER JOIN

SELECT * FROM `post` INNER JOIN author ON post.a_id = author.id

Result

$post = array(
  array('a_id'=>'1','title'=>'My name is HiO :)','id'=>'1','name'=>'HiO'),
  array('a_id'=>'2','title'=>'My name is Blu :D','id'=>'2','name'=>'Blu'),
  array('a_id'=>'3','title'=>'My name is Pouet ><\'','id'=>'3','name'=>'Pouet')
);

LEFT JOIN

SELECT * FROM `post` LEFT JOIN author ON post.a_id = author.id

Result

$post = array(
  array('a_id'=>'1','title'=>'My name is HiO :)','id'=>'1','name'=>'HiO'),
  array('a_id'=>NULL,'title'=>'I am an anonymous :)','id'=>NULL,'name'=>NULL),
  array('a_id'=>'2','title'=>'My name is Blu :D','id'=>'2','name'=>'Blu'),
  array('a_id'=>'3','title'=>'My name is Pouet ><\'','id'=>'3','name'=>'Pouet')
);

RIGHT JOIN

SELECT * FROM `author` RIGHT JOIN post ON author.id = post.a_id

Result

$author = array(
  array('id'=>'1','name'=>'HiO','a_id'=>'1','title'=>'My name is HiO :)'),
  array('id'=>NULL,'name'=>NULL,'a_id'=>NULL,'title'=>'I am an anonymous :)'),
  array('id'=>'2','name'=>'Blu','a_id'=>'2','title'=>'My name is Blu :D'),
  array('id'=>'3','name'=>'Pouet','a_id'=>'3','title'=>'My name is Pouet ><\'')
);