Symfony2 -与本机查询连接


Symfony2 - Join with Native Query

我试图把我的第一个连接与Symfony2 createNativeQuery

我做了第一个没有连接的,没有问题。

我想我丢失了一些步骤,以遵循我的代码:

$rsm = new ResultSetMapping;
        $rsm
            ->addEntityResult('Art'ArticleBundle'Entity'ArticleData', 'ad')
//          ->addEntityResult('Art'ArticleBundle'Entity'Article', 'a')
//          ->addFieldResult('ad', 'id', 'article_data_id')
            ->addJoinedEntityResult('Art'ArticleBundle'Entity'Article', 'a', 'ad', 'article')
            ->addFieldResult('a', 'date_article', 'dateArticle');
        $query = $this->_em->createNativeQuery(
            'SELECT ad.id AS article_data_id, ad.title, ad.abstract '
            . 'FROM art_article_data ad '
            . 'INNER JOIN art_article ON (ad.article_id = a.id) '
            ,
            $rsm
        );
        return $query->getResult();

返回以下错误:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'a.id' in 'on clause'") .

为什么a.id未知?它位于实体和表中。我漏了哪一步

按照@Javad的要求,下面是Article实体

<?php
namespace Art'ArticleBundle'Entity;
use Doctrine'ORM'Mapping as ORM;
use Doctrine'Common'Collections'ArrayCollection;
use Art'ArticleBundle'Entity'ArticleType;
use Art'ArticleBundle'Entity'ArticleCategory;
use Art'ArticleBundle'Entity'ArticleData;
use Art'ArticleBundle'Entity'ArticleHasBrand;
/**
 * Article
 *
 * @ORM'Entity(repositoryClass="Art'ArticleBundle'Entity'Repository'ArticleRepository")
 * @ORM'Table(name="art_article", options={"collate"="utf8_general_ci", "charset"="utf8"})
 * @ORM'HasLifecycleCallbacks()
 */
class Article
{
    function __construct()
    {
        $this->articles__article_data = new ArrayCollection();
        $this->articles_article_has_brand = new ArrayCollection();
        $this->setDateInsert(new 'DateTime);
        $this->setDateEdit(new 'DateTime);
        $this->setIsVisible(1);
        $this->setIsMain(0);
        $this->setOrd(0);
    }
    function __toString()
    {
//      $this->dateArticle;
    }
    /**
     * @var integer
     *
     * @ORM'Id
     * @ORM'Column(name="id", type="integer", options={"unsigned"=true})
     * @ORM'GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @var 'stdClass
     *
     * @ORM'ManyToOne(targetEntity="ArticleType", inversedBy="article_types__article")
     * @ORM'JoinColumn(name="article_type_id", referencedColumnName="id", nullable=false)
     * @ORM'GeneratedValue(strategy="IDENTITY")
     */
    private $articleType;
    /**
     * @var 'stdClass
     *
     * @ORM'ManyToOne(targetEntity="ArticleCategory", inversedBy="article_categories__article")
     * @ORM'JoinColumn(name="article_category_id", referencedColumnName="id", nullable=true)
     * @ORM'GeneratedValue(strategy="IDENTITY")
     */
    private $articleCategory;
    /**
     * @var 'DateTime
     *
     * @ORM'Column(name="date_article", type="date", nullable=true)
     */
    private $dateArticle;
    /**
     * @var string
     *
     * @ORM'Column(name="url", type="string", length=127, nullable=true)
     */
    private $url;
    /**
     * @var 'DateTime
     *
     * @ORM'Column(name="date_insert", type="datetime", nullable=false)
     */
    private $dateInsert;
    /**
     * @var 'DateTime
     *
     * @ORM'Column(name="date_edit", type="datetime", nullable=true)
     */
    private $dateEdit;
    /**
     * @var boolean
     *
     * @ORM'Column(name="is_visible", type="boolean", options={"unsigned"=true, "default"=1}, nullable=false)
     */
    private $isVisible;
    /**
     * @var boolean
     *
     * @ORM'Column(name="is_main", type="boolean", options={"unsigned"=true, "default"=0}, nullable=false)
     */
    private $isMain;
    /**
     * @var integer
     *
     * @ORM'Column(name="ord", type="integer", options={"unsigned"=true, "default"=0}, nullable=true)
     */
    private $ord;
    /**
     * @var object
     * 
     * @ORM'OneToMany(targetEntity="ArticleData", mappedBy="article")
     */
    private $articles__article_data;
    /**
     * @var object
     * 
     * @ORM'OneToMany(targetEntity="ArticleHasBrand", mappedBy="article")
     */
    private $articles_article_has_brand;

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set dateArticle
     *
     * @param 'DateTime $dateArticle
     * @return Article
     */
    public function setDateArticle($dateArticle)
    {
        $this->dateArticle = $dateArticle;
        return $this;
    }
    /**
     * Get dateArticle
     *
     * @return 'DateTime 
     */
    public function getDateArticle()
    {
        return $this->dateArticle;
    }
    /**
     * Get url
     *
     * @return string
     */
    public function getUrl()
    {
        return $this->url;
    }
    /**
     * Set dateInsert
     *
     * @param string $url
     * @return Article
     */
    public function setUrl($url)
    {
        $this->url = $url;
    }
    /**
     * Set dateInsert
     *
     * @param 'DateTime $dateInsert
     * @return Article
     */
    public function setDateInsert($dateInsert)
    {
        $this->dateInsert = $dateInsert;
        return $this;
    }
    /**
     * Get dateInsert
     *
     * @return 'DateTime 
     */
    public function getDateInsert()
    {
        return $this->dateInsert;
    }
    /**
     * Set dateEdit
     *
     * @param 'DateTime $dateEdit
     * @return Article
     */
    public function setDateEdit($dateEdit)
    {
        $this->dateEdit = $dateEdit;
        return $this;
    }
    /**
     * Get dateEdit
     *
     * @return 'DateTime 
     */
    public function getDateEdit()
    {
        return $this->dateEdit;
    }
    /**
     * Set isVisible
     *
     * @param boolean $isVisible
     * @return Article
     */
    public function setIsVisible($isVisible)
    {
        $this->isVisible = $isVisible;
        return $this;
    }
    /**
     * Get isVisible
     *
     * @return boolean 
     */
    public function getIsVisible()
    {
        return $this->isVisible;
    }
    /**
     * Set isMain
     *
     * @param boolean $isMain
     * @return Article
     */
    public function setIsMain($isMain)
    {
        $this->isMain = $isMain;
        return $this;
    }
    /**
     * Get isMain
     *
     * @return boolean 
     */
    public function getIsMain()
    {
        return $this->isMain;
    }
    /**
     * Set ord
     *
     * @param integer $ord
     * @return Article
     */
    public function setOrd($ord)
    {
        $this->ord = $ord;
        return $this;
    }
    /**
     * Get ord
     *
     * @return integer 
     */
    public function getOrd()
    {
        return $this->ord;
    }
    /**
     * Set articleType
     *
     * @param 'Art'ArticleBundle'Entity'ArticleType $articleType
     * @return Article
     */
    public function setArticleType(ArticleType $articleType = null)
    {
        $this->articleType = $articleType;
        return $this;
    }
    /**
     * Get articleType
     *
     * @return 'Art'ArticleBundle'Entity'ArticleType 
     */
    public function getArticleType()
    {
        return $this->articleType;
    }
    /**
     * Set articleCategory
     *
     * @param 'Art'ArticleBundle'Entity'ArticleCategory $articleCategory
     * @return Article
     */
    public function setArticleCategory(ArticleCategory $articleCategory = null)
    {
        $this->articleCategory = $articleCategory;
        return $this;
    }
    /**
     * Get articleCategory
     *
     * @return 'Art'ArticleBundle'Entity'ArticleCategory 
     */
    public function getArticleCategory()
    {
        return $this->articleCategory;
    }
    /**
     * Add articles__article_data
     *
     * @param 'Art'ArticleBundle'Entity'ArticleData $articlesArticleData
     * @return Article
     */
    public function addArticlesArticleData(ArticleData $articlesArticleData)
    {
        $this->articles__article_data[] = $articlesArticleData;
        return $this;
    }
    /**
     * Remove articles__article_data
     *
     * @param 'Art'ArticleBundle'Entity'ArticleData $articlesArticleData
     */
    public function removeArticlesArticleData(ArticleData $articlesArticleData)
    {
        $this->articles__article_data->removeElement($articlesArticleData);
    }
    /**
     * Get articles__article_data
     *
     * @return 'Doctrine'Common'Collections'Collection 
     */
    public function getArticlesArticleData()
    {
        return $this->articles__article_data;
    }
    /**
     * Add articles_article_has_brand
     *
     * @param 'Art'ArticleBundle'Entity'ArticleHasBrand $articlesArticleHasBrand
     * @return Article
     */
    public function addArticlesArticleHasBrand(ArticleHasBrand $articlesArticleHasBrand)
    {
        $this->articles_article_has_brand[] = $articlesArticleHasBrand;
        return $this;
    }
    /**
     * Remove articles_article_has_brand
     *
     * @param 'Art'ArticleBundle'Entity'ArticleHasBrand $articlesArticleHasBrand
     */
    public function removeArticlesArticleHasBrand(ArticleHasBrand $articlesArticleHasBrand)
    {
        $this->articles_article_has_brand->removeElement($articlesArticleHasBrand);
    }
    /**
     * Get articles_article_has_brand
     *
     * @return 'Doctrine'Common'Collections'Collection 
     */
    public function getArticlesArticleHasBrand()
    {
        return $this->articles_article_has_brand;
    }
}

你的查询应该是:

$query = $this->_em->createNativeQuery(
        'SELECT ad.id AS article_data_id, ad.title, ad.abstract '
        . 'FROM art_article_data ad '
        . 'INNER JOIN art_article a ON (ad.article_id = a.id) '
        ,
        $rsm
    );

您错过了art_article的别名