2013-01-03 82 views
0

我試圖生成一個簡單的SQL選擇:簡單innerJoin主義查詢

SELECT c.com_id, c.pro_id, c.com_nombre 
FROM bd_fn.fn_comuna c 
inner join bd_fn.fn_provincia p 
on (c.pro_id = p.pro_id) 
where p.pro_nombre = 'namepro'; 

但DQL拋出這個錯誤:

Doctrine_Table_Exception' with message 'Unknown relation alias fn_provincia.

學說版本是1.XX,持續創造了通過視覺範式。 的DQL是這樣的:

$q = Doctrine_Query::create() 
    ->select('c.com_id') 
    ->from('fn_comuna c') 
    ->innerJoin('c.fn_provincia p') 
    ->where('p.pro_nombre=?',$namepro); 

類fn_comuna.php

<?php 
/** 
* "Visual Paradigm: DO NOT MODIFY THIS FILE!" 
* 
* This is an automatic generated file. It will be regenerated every time 
* you generate persistence class. 
* 
* Modifying its content may cause the program not work, or your work may lost. 
*/ 

class Fn_comuna extends Doctrine_Record { 
    public function setTableDefinition() { 
    $this->setTableName('bd_fn.fn_comuna'); 
    $this->hasColumn('com_id', 'integer', 4, array(
     'type' => 'integer', 
     'length' => 4, 
     'unsigned' => false, 
     'notnull' => true, 
     'primary' => true, 
     'autoincrement' => false, 
    ) 
    ); 
    $this->hasColumn('pro_id', 'integer', 4, array(
     'type' => 'integer', 
     'length' => 4, 
     'unsigned' => false, 
     'notnull' => true, 
    ) 
    ); 
    $this->hasColumn('com_nombre', 'string', 100, array(
     'type' => 'string', 
     'length' => 100, 
     'fixed' => false, 
     'notnull' => true, 
    ) 
    ); 
    } 

    public function setUp() { 
    parent::setUp(); 
    $this->hasOne('Fn_provincia as pro', array(
     'local' => 'pro_id', 
     'foreign' => 'pro_id' 
    ) 
    ); 
    $this->hasMany('Fn_institucion as fn_institucion', array(
     'local' => 'com_id', 
     'foreign' => 'com_id' 
    ) 
    ); 
    $this->hasMany('Fn_replegal as fn_replegal', array(
     'local' => 'com_id', 
     'foreign' => 'com_id' 
    ) 
    ); 
    } 

} 

?> 
+0

你是什麼主義模式? – j0k

+0

與數據庫相同嗎? bd_fn是sql模式。我用Visual Paradigm爲ORM創建了一個postgres數據庫,其中包含Doctrine 1.xx。加入是問題。我不知道爲什麼,如果這些表是相關的。 –

+0

你的教義模型類「fn_comuna」裏面有什麼? – j0k

回答

2

你可以從你的模型類看,fn_comuna & fn_provincia之間的關係稱爲pro

$this->hasOne('Fn_provincia as pro', array(
    'local' => 'pro_id', 
    'foreign' => 'pro_id' 
) 
); 

所以,你必須使用這個名字的時候你處理聯接:

$q = Doctrine_Query::create() 
    ->select('c.com_id') 
    ->from('fn_comuna c') 
    ->innerJoin('c.pro p') 
    ->where('p.pro_nombre=?', $namepro); 
+0

是的!那是。非常感謝 –

+0

@ h3g0r_很高興聽到!如果我的回答對你有幫助,可以[接受它](http://meta.stackexchange.com/a/5235/182741),如果你有這種感覺,你也可以投票贊成。 – j0k

0

變化:

p.pro_id = (SELECT p2.pro_id FROM etc.. 

要:

p.pro_id IN(SELECT p2.pro_id FROM etc.. 

不知道爲什麼你需要的子查詢首先,爲什麼不是ju ST失去它,將其替換爲:

where pro_nombre = 'namepro' 
+0

仍然無法正常工作。是的,子查詢是無用的,謝謝。問題是加入。 –

+0

我的解決辦法,以奇怪的錯誤的INNERJOIN - >選擇( 'c.com_id') - 從( 'fn_comuna C') //->innerJoin('c.fn_provincia P') > - >其中( 'c.pro_id =(SELECT p2.pro_id FROM fn_provincia p2 WHERE p2.pro_nombre =?)',$ proname); 無論如何感謝 –