【问题标题】:SQL join with Kohana ORM使用 Kohana ORM 进行 SQL 连接
【发布时间】:2010-07-01 19:16:50
【问题描述】:

我正在使用带有 ORM 的 Kohana 3.0.6。

我有一个名为“卡车”的模型,在他的表格中有一列带有他的制造商(“制造商”)的 ID。然后我在他的表中有带有 id 和名称的“制造商”模型。

我正在尝试在显示卡车列表时执行简单的 LEFT-JOIN,这样我就可以直接获取其制造商的名称。

这是我的“卡车”模型:

    <?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”,虽然我也在某处看到过“with()”调用,但无法使其正常工作(文档有点缺乏,特别是对于版本 3.x.x)。

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

这是我在视图中用来输出制造商名称的行(类似这些行):

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

【问题讨论】:

    标签: php orm join kohana


    【解决方案1】:

    maker 表中是否有名为 truck_id 的列?

    【讨论】:

    • 不,因为每个制造商没有一辆卡车……而是每辆卡车有一个制造商。我在 Trucks 表中有一个名为“maker”的列,我在“has_one”arra 中标识了它,除非我弄错了。
    • 如果您的 Truck has_one Maker,则外键进入 Maker 表。如果您的 Truck belongs_to Maker,那么外键进入 Truck 表。您上面的代码指出 Truck has_one Maker,这就是我问的原因。我认为你应该改变你的模型,以便 Truck belongs_to Maker 并且 Maker has_many Trucks。
    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 2013-09-28
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多