私は次のコードを持っています:
_$entry->save();
$categories = [];
$categories[Input::get('main_category')] = ['main' => 1];
for ($i=1; $i<=4 ; ++$i) {
$input = Input::get('category_'.$i);
if ($input != '') {
$categories[$input] = ['main' => 0];
}
}
$entry->categories()->sync($categories);
$inTags = explode(',', trim( Input::get('tags'), ','));
$tags = [];
foreach ($inTags as $tag) {
$tag = trim($tag);
if ($tag == '') {
continue;
}
$fTag = Tag::firstOrCreate(array('name' => $tag));
$tags[$fTag->id] = ['entry_id' => $entry->id];
}
$entry->tags()->sync($tags);
_
上記のコードでは、エントリを作成し($entry->save()
はそれを理解するのに十分です、以前のコードは重要ではありません)、次にこのエントリが属するカテゴリに保存し(ピボットテーブルを使用)、タグで同じことを行います(ただし、タグの場合、タグが存在しない場合は作成します)。
ただし、両方のピボットテーブルで、データを挿入した後、_created_at
_フィールドはデフォルト(_0000-00-00 00:00:00
_)のままになります(おそらく_updated_at
_でも同じですが、テストしていません)。
ファイリングタイムスタンプを自動的にアクティブ化する必要がありますか、それとも自分で手動で入力する必要がありますか(ただし、コーディングがはるかに多く、sync
を使用しないことを意味します)?
belongsToMany
リレーションを同期/アタッチするときにピボットタイムスタンプを処理するには、リレーション定義にwithTimestamps()
を含める必要があります。
// some model
public function someRelation()
{
return $this->belongsToMany('RelatedModel')->withTimestamps();
}
次に、すべてのsync
/attach
/updateExistingPivot
がピボットテーブルのタイムスタンプを設定/更新します。