Eloquent sync和created_at / updated_at

问题描述 投票:13回答:1

我有以下代码:

$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)?

php laravel laravel-4 eloquent
1个回答
51
投票

为了在同步/附加belongsToMany关系时处理数据透视时间戳,您需要在关系定义中包含withTimestamps()

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

然后每个sync / attach / updateExistingPivot将设置/更新数据透视表上的时间戳。

© www.soinside.com 2019 - 2024. All rights reserved.