1
ネストされたリレーションが多いモデルがあります。私はまず次のようにロードします:Laravelでネストされたリレーションを持つモデルを複製する方法
<?php
$model = Model::where('id', $id)
->with(
'relation1',
'relation2',
'relation2.subrelation1',
'relation2.subrelation2',
'relation3',
'relation3.subrelation1',
'relation3.subrelation2',
'relation3.subrelation3',
'relation3.subrelation4.subrelation',
)->get();
?>
ここで私はリレーションを複製し、最終的にそれらを複製します。
<?php
$clone = $model->replicate();
$clone->push();
foreach ($model->getRelations() as $relation => $entries){
foreach($entries as $entry){
$e = $entry->replicate();
if ($e->push()){
$clone->{$relation}()->save($e);
// @todo Go further down
}
}
}
}
?>
問題は、これが第1レベルの関係では完全に機能することです。ただし、追加のネストされたリレーションがある場合、それらは複製/クローニングされません。リレーションシップでさらにトラバースしてそれらを複製する最も効率的な方法は何ですか?
おかげ
モデル内のレプリケート機能はどのように見えますか? – farjam
あなたが書くことができるのは私の答えです。既存のものは、Illuminate/Database/Eloquent/Model、APIのソースコードにあります:https://laravel.com/api/5.3/Illuminate/Database/Eloquent/Model.html#method_replicate – Jeff
これはうまくいくでしょうがたくさんのレコードがある場合は遅くなります。 –