ActiveRecord & PHP:定义两个模型之间不同关联的最佳方式

Posted

技术标签:

【中文标题】ActiveRecord & PHP:定义两个模型之间不同关联的最佳方式【英文标题】:ActiveRecord & PHP: the best way to define different associations between two models 【发布时间】:2012-10-06 16:20:59 【问题描述】:

我有模型 Page 和 Commit。页面有很多提交。 但有时我只需要获取页面的最后一次提交,有时需要获取页面提交的历史记录(最后 20 次或全部)。

我为模型编写了这段代码:

class Page extends ActiveRecord\Model 
    static $has_many = array(
        array('commits',
            'select'=> 'content',
            'order' => 'id DESC',
            'limit' => 1
        ));

class Commit extends ActiveRecord\Model 
    static $belongs_to = array(
        array('page'));

那么我需要做什么才能有机会显示所有提交(例如 ['limit' => 20])?

【问题讨论】:

【参考方案1】:

这是一种解决方法,但应该这样做......有点模拟 Rails 的范围:

class Page extends ActiveRecord\Model 
    static $has_many = array(
        array('limited_commits',
            'class_name' => 'Commit',
            'select'=> 'content',
            'order' => 'id DESC',
            'limit' => 1
        ),
        array('all_commits',
            'class_name' => 'Commit',
            'select' => 'content',
            'order' => 'id DESC'
        )
    );

class Commit extends ActiveRecord\Model 
    static $belongs_to = array(
        array('page'));

然后只需使用您需要的“范围”:

Page::first->limited_commits
Page::first->all_commits

这不是一个真正的整体解决方案,但它应该可以解决问题......

【讨论】:

以上是关于ActiveRecord & PHP:定义两个模型之间不同关联的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

PHP PHP - 轻量级数据库和行集类,ActiveRecord样式函数

PHP ActiveRecord - 在模型中找不到关联

SQL 基准测试:PHP ActiveRecord ORM 与 MySQL 与 CodeIgniter Active Record 与标准 PHP

Yii2 - ActiveRecord 到数组

条纹自定义付款表单:ActiveRecord::RecordNotFound

ActiveRecord 自定义 SQL 结果自动映射