我试图在两个表之间进行连接,但是我得到了这个错误:
消息: SQLSTATE42000:语法错误或访问冲突: 1064您的SQL语法中有一个错误;请查看与您的MySQL服务器版本对应的手册,了解在第1行'‘附近使用的正确语法
代码如下:
页面模型
public function __construct()
{
$this->pages_meta = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* @var integer $id
* @Id @Column(type="integer")
* @GeneratedValue
*/
private $id;
/**
* @var integer $layout
* @Column(type="string")
*/
private $layout;
/**
* @var string $name
* @Column(type="string")
*/
private $name;
/**
* @var string $title
* @Column(type="string")
*/
private $title;
/**
* @var string $slug
* @Column(type="string")
*/
private $slug;
/**
* @var string $options
* @Column(type="integer")
*/
private $content_id;
/**
* @var integer $user_id
* @Column(type="integer")
*/
private $user_id;
/**
* @var string $created_at
* @Column(type="datetime")
*/
private $created_at;
/**
* @var string $language
* @Column(type="string")
*/
private $language;
/**
* @OneToMany(targetEntity="Default_Model_PageMeta", mappedBy="page_id")
* @JoinColumn(name="id", referencedColumnName="page_id")
*/
private $meta;
... (getters and setters)PageMeta模型
/**
* @var integer $id
* @Id @Column(type="integer")
* @GeneratedValue
*/
private $id;
/**
* @var integer $page_id
* @Column(type="integer")
*/
private $page_id;
/**
* @var integer $key
* @Column(type="string")
*/
private $key;
/**
* @var integer $value
* @Column(type="string")
*/
private $value;
... (getters and setters)join语法
$doctrine = Zend_Registry::get('doctrine');
$request = Zend_Controller_Front::getInstance()->getRequest();
$qb = $doctrine->_em->createQueryBuilder()
->select('p, m')
->from('Default_Model_Page', 'p')
->join('p.meta', 'm');
$query = $qb->getQuery();
$page = $query->getResult();
Zend_Debug::dump($page); die;知道我做错了什么吗?
提前感谢!
发布于 2011-07-08 00:24:08
看起来您还没有告诉Doctrine如何将页面模型与PageMeta模型相关联。我可以猜到PageMeta表中的外键是page_id,但它不会出现在您的注释中。
在PageMeta模型中,尝试:
/**
* The page
*
* @var Default_Model_Page
* @OneToOne(targetEntity="Default_Model_Page")
* @JoinColumn(name="page_id", referencedColumnName="id")
*/
private $page;然后,在查询中,您应该能够执行以下操作:
$qb = $doctrine->_em->createQueryBuilder()
->select('p, m')
->from('Default_Model_PageMeta', 'm')
->join('m.page', 'p');没有经过测试,但是像这样的东西应该可以工作。
发布于 2013-09-01 21:42:02
不要将关系所需的数据库列同时映射为@Column和@ManyToOne (或OneToOne),但一定要选择一个。对于大多数关系,您需要关联映射(@ManyToOne等),并且需要删除@列。
如果你同时使用这两种方法,理论将会变得非常不稳定。
/**
* @Entity
*/
class Page
{
/**
* @OneToMany(targetEntity="PageMeta", mappedBy="page")
*/
private $meta;
public function __construct() {
$this->meta = new \Doctrine\Common\Collections\ArrayCollection();
}
}
/**
* @Entity
*/
class PageMeta
{
// Remove the property $page_id
/**
* @ManyToOne(targetEntity="Page", inversedBy="meta")
* @JoinColumn(name="page_id", referencedColumnName="id")
*/
private $page;
}你可以在assiciations here上找到更多信息。
https://stackoverflow.com/questions/6613171
复制相似问题