web-dev-qa-db-ja.com

雄弁な同期とcreated_at / updated_at

私は次のコードを持っています:

_$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を使用しないことを意味します)?

19

belongsToManyリレーションを同期/アタッチするときにピボットタイムスタンプを処理するには、リレーション定義にwithTimestamps()を含める必要があります。

// some model
public function someRelation()
{
  return $this->belongsToMany('RelatedModel')->withTimestamps();
}

次に、すべてのsync/attach/updateExistingPivotがピボットテーブルのタイムスタンプを設定/更新します。

52
Jarek Tkaczyk