d1gi
Новичок
Задача в принципе простая, есть 2 таблицы: Sites и SitesDomain
т.е. один и тотже сайт может откликаться на несколько доменов.
Мне нужно получить сайт запросив его домен, например раньше я делал так:
Сейчас пытаюсь всё это перевести на ОРМ, создал 2 класса сущностей:
Далее написал DQL:
в ответ получаю ошибку:
Читал http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/association-mapping.html
http://odiszapc.ru/doctrine/association-mapping/
http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html
но чувствую, что-то где-то непонял![Frown :( :(](/talk/styles/default/xenforo/smilies/frown.png)
Скорее всего неправильно определил связи... но крутил уже всяко разно... а может быть и сам DQL неверно составлен
кеш симфони очищаю постоянно, в доктрине кеш тоже отключен...
Если кто увидел явно ошибку, ткните пальцем плиз?![Smile :) :)](/talk/styles/default/xenforo/smilies/smile.png)
т.е. один и тотже сайт может откликаться на несколько доменов.
SQL:
CREATE TABLE `engine_sites` (
`site_id` int(11) NOT NULL AUTO_INCREMENT,
`properties` longtext NOT NULL COMMENT '(DC2Type:array)',
`create_datetime` datetime NOT NULL,
PRIMARY KEY (`site_id`)
) ENGINE=InnoDB;
CREATE TABLE `engine_sites_domains` (
`domain` varchar(255) NOT NULL,
`site_id` int(11) NOT NULL,
PRIMARY KEY (`domain`),
KEY `site_id` (`site_id`)
) ENGINE=InnoDB;
SQL:
SELECT s.*
FROM engine_sites AS s
JOIN engine_sites_domains AS d ON s.site_id = d.site_id
WHERE d.domain = 'localhost'
PHP:
<?php
namespace SmartCore\Bundle\EngineBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use SmartCore\Bundle\EngineBundle\Entity\SiteDomains;
/**
* @ORM\Entity
* @ORM\Table(name="engine_sites")
*/
class Site
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*
* @ORM\OneToMany(targetEntity="SiteDomains", mappedBy="site_id")
* @ORM\JoinColumn(name="site_id", referencedColumnName="site_id")
*/
protected $site_id;
/**
* @ORM\Column(type="array")
*/
protected $properties;
/**
* @ORM\Column(type="datetime")
*/
protected $create_datetime;
public function __construct()
{
$this->create_datetime = new \DateTime();
$this->properties = new ArrayCollection();
}
}
PHP:
<?php
namespace SmartCore\Bundle\EngineBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use SmartCore\Bundle\EngineBundle\Entity\Site;
/**
* @ORM\Entity
* @ORM\Table(name="engine_sites_domains",
* indexes={
* @ORM\Index(name="site_id", columns={"site_id"})
* }
* )
*/
class SiteDomains
{
/**
* @ORM\Id
* @ORM\Column(type="string")
*/
protected $domain;
/**
* @ORM\Column(type="integer")
*
* @ORM\ManyToOne(targetEntity="Site", inversedBy="site_id")
* @ORM\JoinColumn(name="site_id", referencedColumnName="site_id")
*/
protected $site_id;
}
SQL:
SELECT s
FROM SmartCoreEngineBundle:Site s JOIN s.site_id d
WHERE d.domain = 'localhost'
Код:
[Semantical Error] line 0, col 71 near 'd
': Error: Class SmartCore\Bundle\EngineBundle\Entity\Site has no association named site_id
http://odiszapc.ru/doctrine/association-mapping/
http://docs.doctrine-project.org/en/latest/reference/dql-doctrine-query-language.html
но чувствую, что-то где-то непонял
![Frown :( :(](/talk/styles/default/xenforo/smilies/frown.png)
Скорее всего неправильно определил связи... но крутил уже всяко разно... а может быть и сам DQL неверно составлен
![Frown :( :(](/talk/styles/default/xenforo/smilies/frown.png)
Если кто увидел явно ошибку, ткните пальцем плиз?
![Smile :) :)](/talk/styles/default/xenforo/smilies/smile.png)