複製しようとしているARモデルがありますが、外部キーを手動で変更する必要があります。
$_POST['competition_id'] = 99;
$prizes = CompetitionPrizes::model()->findAll('competition_id =:competition_id',array(':competition_id'=> $_POST['competition_id']));
このクエリは基本的に賞金テーブルをクエリし、特定のコンテストのすべての行を取得します。賞品オブジェクトを使用して、手動で設定するコンテストIDを除いて、基本的に同じ情報を再挿入/複製したいと思います。
基本的に1行しかなく、うまく機能するARオブジェクトに対して同様のことを行いましたが、この場合、コンテストは複数の賞を獲得できるため、この同じコードでは機能しません。
// My existing code for duplication process
$obj = Competitions::model()->find('competition_id=:competition_id', array(':competition_id' => $post['competition_id']));
$clone = clone $obj;
$clone->isNewRecord = true;
unset($clone->competition_id); // i want to remove this so it is auto inserted instead via the db
$clone->save();
これはうまく機能します-賞品の「コレクション」でこれを変更し、独自の「competition_id」値を設定しながらこれをデータベースに複製するにはどうすればよいですか。
注-私はYiiを初めて使用するので、明らかなエラー/悪い習慣をした場合はお知らせください
クローン作成は機能しません。新しいオブジェクトに属性を割り当てる必要があります。
$obj = Competitions::model()->find('competition_id=:competition_id', array(':competition_id' => $post['competition_id']));
$clone = new Competitions;
$clone->attributes = $obj->attributes;
$clone->save();
Yii2フレームワークでモデル/ ActiveRecordを複製するより一般的な方法が必要な場合は、次のソリューションを使用できます。
$copy = clone $model;
$copy->isNewRecord = true;
foreach ($model->getPrimaryKey(true) as $field => $value) {
unset($copy->{$field});
}
$copy->save();
重複モデルに関するGitHubの問題に関するディスカッション: https://github.com/yiisoft/yii2/issues/7544#issuecomment-77158479
(yii2構文)はどうですか:
$model=Competitions::findOne([':competition_id' => $post['competition_id']]);
$model->id = null;
$model->isNewRecord = true;
$model->save();
上記のMichielが私を助けてくれましたが、私の問題に対する答えです。あるいは、別の答えを追加してもかまわない場合は、受け入れられた答えを提供します。
foreach($models as $model)
{
$clone = new Competitions;
$clone->attributes = $model->attributes;
$clone->competition_id = '123' // custom var i am setting manually.
$clone->save();
}