活动记录自定义关系(不基于FK)

时间:2012-08-18 23:18:29

标签: activerecord yii

我有2个表: production 和* production_summary *。 生产存储有关生产,销售或丢弃的每个生产的数据。 * production_summary *存储关于生产的每日摘要。这是相关的数据库结构:

CREATE TABLE `production` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `created` date NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `production_summary` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `date` date NOT NULL,
  `summary` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

模型由Gii生成,名称分别为: Production ProductionSummary

我定义了这样的关系:

class Production extends CActiveRecord
{
...
public function relations()
{
    return array(
        'summary' => array(self::HAS_ONE, 'ProductionSummary', '', 'on' => 'summary.date = t.created' ),
    );
}
...
}

当我得到模特时工作正常:

$model = Production::model()->with( 'summary' )->findByPk($id);

但延迟加载失败:未知列 t.created 。我明白了:Yii在延迟加载时不加入表,只是查询 ProductionSummary 表。

在我的案例中使用with()不是问题,但是开始想知道定义这种关系的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

从Yii 1.1.9开始,您可以通过这种方式定义关系:

return array(
    'summary' => array(self::HAS_ONE, 'ProductionSummary', array('date' => 'created')),
);