Help with query

New topics about Symfony 2 should go here

Moderators: dcobalt, tiagojsag

Help with query

Postby psaid » Sun Mar 18, 2012 7:18 pm

Hello, i need some help to make a query... i have this in MySql.

Image

My entities

Manufacturer.php
Code: Select all
/**
 * pdias\bleBundle\Entity\Manufacturer
 *
 * @ORM\Table(name="manufacturer")
 * @ORM\Entity
 */
class Manufacturer
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $name
     *
     * @ORM\Column(name="name", type="string", length=32, nullable=false)
     */
    private $name;

    /**
     * @var string $image
     *
     * @ORM\Column(name="image", type="string", length=64, nullable=false)
     */
    private $image;

    /**
     * @var datetime $dateadded
     *
     * @ORM\Column(name="dateadded", type="datetime", nullable=false)
     */
    private $dateadded;

    /**
     * @var datetime $lastmodified
     *
     * @ORM\Column(name="lastmodified", type="datetime", nullable=false)
     */
    private $lastmodified;

    /**
     * @var text $url
     *
     * @ORM\Column(name="url", type="text", nullable=true)
     */
    private $url;

    /**
     * @var manufacturerDescription
     *
     * @ORM\OneToMany(targetEntity="manufacturerDescription", mappedBy="manufacturerDescription") */
    private $manufacturerDescription;

    public function __construct()
    {
       $this->manufacturerDescription = new \Doctrine\Common\Collections\ArrayCollection();
    }

    ....
}


Language.php
Code: Select all
/**
 * playme\bleBundle\Entity\Language
 *
 * @ORM\Table(name="language")
 * @ORM\Entity
 */
class Language
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string $name
     *
     * @ORM\Column(name="name", type="string", length=100, nullable=false)
     */
    private $name;

    /**
     * @var string $code
     *
     * @ORM\Column(name="code", type="string", length=2, nullable=false)
     */
    private $code;

    public function __construct()
    {
       
    }

    ....
}


ManufacturerDescription.php
Code: Select all
/**
 * playme\bleBundle\Entity\ManufacturerDescription
 *
 * @ORM\Table(name="manufacturer_description")
 * @ORM\Entity
 */
class ManufacturerDescription
{
    /**
     * @var integer $manufacturer
     *
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Manufacturer", inversedBy="manufacturerDescription")
     */
    private $manufacturer;

    /**
     * @var integer $language
     *
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Language", inversedBy="id")
     */
    private $language;

    /**
     * @var text $description
     *
     * @ORM\Column(name="description", type="text", nullable=false)
     */
    private $description;


    public function __construct(Manufacturer $manufacturer, Language $language, $description = "")
    {
        $this->manufacturer = $manufacturer;
        $this->language = $language;
        $this->description = $description;
    }

    ....
}


In MySql i do this query and works ok...
Code: Select all
SELECT manufacturer.id, manufacturer.name, manufacturer_description.description, language.code
FROM manufacturer INNER JOIN (`language` INNER JOIN manufacturer_description ON language.id = manufacturer_description.language_id) ON manufacturer.id = manufacturer_description.manufacturer_id WHERE manufacturer.id=42 AND language.code="pt";


Can someone help me how do i do this query using querybuilder or createquery...

I tried with CreateQuery:
Code: Select all
$query = $em->createQuery('SELECT m FROM playmebleBundle:Manufacturer m INNER JOIN (
                                            playmebleBundle:Language l INNER JOIN playmebleBundle:ManufacturerDescription md ON l.id = md.language_id
                                        ) ON m.id = md.manufacturer_id
                                   WHERE m.id=42 AND l.code="pt"');


but getting this error

Code: Select all
[Semantical Error] line 0, col 103 near 'playmebleBundle:Language': Error: Identification Variable ( used in join path expression but was not defined before.


also tried a different approach to see if any results obtained (but this is not the query I want), just to test ...

Code: Select all
        $dql = 'SELECT m FROM playmebleBundle:Manufacturer m JOIN m.manufacturerDescription md WHERE m.id = 42';

        $em = $this->getDoctrine()->getEntityManager();
        $query = $em->createQuery($dql);


but getting this error

Code: Select all
Notice: Undefined index: manufacturerDescription in C:\wamp\www\ble\vendor\doctrine\lib\Doctrine\ORM\Query\SqlWalker.php line 747


At this point I do not know whether they are just problems with the construction of the query ... or if the entities are not well defined (their relationship) ...
So I come to ask for your help ...

Thank you,

Paulo
psaid
Junior Member
 
Posts: 15
Joined: Mon Mar 12, 2012 4:40 pm

Return to General Symfony 2 discussion

Who is online

Users browsing this forum: Google [Bot] and 2 guests