2010-07-01 33 views
1

我在ORM中使用Kohana 3.0.6。SQL加入Kohana ORM

我有一個名爲「卡車」的模型,在他的表中有一個與他的製造商(「製造商」)的ID列。然後我在他的桌子上有「製造商」模型,其ID和名稱。

我試圖做一個簡單的左加入,當我顯示的卡車上市,所以我可以直接得到他們的製造商的名稱。

這裏是我的「卡車」的模式:

<?php defined('SYSPATH') or die('No direct access allowed.'); 

class Model_Truck extends ORM { 
// Database settings 
    protected $_db = 'default'; 
    protected $_table_name = 'trucks'; 
    protected $_primary_key = 'id'; 

    //Tried adding this but doesn't seems to work 
protected $_has_one = array('maker' => array('model' => 'maker')); 

// Table fields 
protected $_table_columns = array(
     'id' => array('data_type' => 'int', 'is_nullable' => FALSE), 
     'serial' => array('data_type' => 'string', 'is_nullable' => FALSE), 
     'maker' => array('data_type' => 'string', 'is_nullable' => FALSE), 
     'model' => array('data_type' => 'string', 'is_nullable' => FALSE), 
     'year' => array('data_type' => 'int', 'is_nullable' => FALSE), 
    ); 

} 

正如你所看到的,我用這行添加「HAS_ONE」,雖然我也看到了「有()」呼叫某處,但不能使它工作(doc是有點缺乏,特別是對於版本3.xx)。

protected $_has_one = array('maker' => array('model' => 'maker')); 

下面是我使用的視圖中的輸出線的製造商名稱(類似的規定):

foreach ($trucks as $t) { 
    echo($t->maker->name); 
} 

回答

0

你有一個名爲truck_id在製造商表中的列?

+0

沒有,因爲每個製造商沒有一輛卡車......但每輛卡車只有一個製造商。我在卡車表中有一個名爲「製造商」的專欄,我在「has_one」排列中找到它,除非我錯誤。 – Ceb 2010-07-02 20:31:04

+0

如果您的卡車has_one Maker,則外鍵進入Maker表格。如果您的卡車屬於製造商,那麼外鍵將進入卡車表。你上面的代碼表明Truck has_one Maker,這就是我問的原因。我認爲你應該改變你的模型,讓卡車屬於製造商和製造商has_many卡車。 – slacker 2010-07-11 22:05:36