0

productionと *production_summary* の2 つのテーブルがあります。生産、販売、または廃棄される各製品に関する生産ストア データ*production_summary* ストア日報生産について。これは、関連するDB 構造です。

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);

ただし、遅延読み込みは次のように失敗します: unknown column t.created。Yii は遅延読み込み中にテーブルを結合せず、ProductionSummaryテーブルをクエリするだけです。

私の場合、使用with()は問題ではありませんが、このタイプの関係を定義する正しい方法は何だろうかと考え始めます。

4

1 に答える 1

2

Yii 1.1.9 以降、次のようにリレーションを定義できます。

return array(
    'summary' => array(self::HAS_ONE, 'ProductionSummary', array('date' => 'created')),
);
于 2012-08-18T23:59:58.597 に答える