Kohana-v3 ORM 父关系

Posted

技术标签:

【中文标题】Kohana-v3 ORM 父关系【英文标题】:Kohana-v3 ORM parent relationship 【发布时间】:2010-05-23 14:11:29 【问题描述】:

我刚开始使用 Kohana 框架的第 3 版。 我在 $_has_many 等方面做了一些工作。

现在我有了表格页面。主键是 pageID。该表有一个名为 parentPageID 的列。现在我想制作一个 ORM 模型,当像这样$page->parent->find() 访问时,它会返回由 parentPageID 标识的页面。

我已经有了以下内容:

// Settings
protected $_table_name  = 'pages';
protected $_primary_key = 'pageID';
protected $_has_one = array(
    'parent' => array(
        'model'     => 'page',
        'foreign_key'   => 'parentPageID',
    ),
);

但这不起作用,它只是从表中返回第一页。最后一个查询是这样说的:

SELECT `pages`.* FROM `pages` ORDER BY `pages`.`pageID` ASC LIMIT 1

有人知道怎么解决吗?

我知道这可以:$parent = $page->parent->find($page->parentPageID); 但它必须而且可以更干净(我认为)。

已解决,请看下面我的回答。

【问题讨论】:

【参考方案1】:

我自己解决了。我需要交换东西。我解释一下:

你可以这样造句:一个页面属于他的父页面。

所以,当我这样想的时候,我知道我做错了什么。

不,我有这个(完美的):

protected $_belongs_to = array
(
    'parent' => array
    (
        'model' => 'page',
        'foreign_key' => 'parentPageID'
    )
);
protected $_has_many = array
(
    'childs' => array
    (
        'model' => 'page',
        'foreign_key' => 'parentPageID',
    )
);

我可以这样使用它:

$havesParent = $page->parent->loaded();
$childs = $page->childs->find_all()->as_array();
// ...

@*** 抱歉,我用我自己回答的问题填满了你的数据库。

【讨论】:

以上是关于Kohana-v3 ORM 父关系的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kohana 3 中链接多个 ORM 关系?

Django 第十课 3.ORM表关系

Kohana 3 ORM 关系问题

Kohana 3 ORM - 使用静态方法连接和 has_many 关系

Kohana 3 ORM:如何使用 2 个多对多关系执行查询

如何在 Kohana 3 ORM 关系中指定两个键