【问题标题】:Active record custom relation (not based on FK)活动记录自定义关系(不基于 FK)
【发布时间】:2012-08-18 23:18:28
【问题描述】:

我有 2 个表:production 和 *production_summary*。 production 存储有关生产、销售或丢弃的每个产品的数据。 *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 生成,名称分别为:ProductionProductionSummary

我这样定义关系:

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() 不是问题,但开始想知道定义此类关系的正确方法是什么?

【问题讨论】:

    标签: activerecord yii


    【解决方案1】:

    从 Yii 1.1.9 开始,您可以这样定义关系:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 2012-04-29
      • 2017-08-27
      相关资源
      最近更新 更多