Laravel - изменить значение точки поворота во многих полиморфных отношениях

У меня есть посты, видео и таблицы тегов, связанных друг с другом во многих полиморфных отношениях.

Структура таблиц

posts
-----
id
name


videos
------
id
name

tags
----
id
name

taggables
---------
id
tag_id
taggable_id
taggable_type
joined_at
current

Модели

После

class Post extends Model
{
    protected $fillable = ['name'];

    public function tags()
    {
        return $this->morphToMany(Tag::class, 'taggable')->withPivot('joined_at', 'current');
    }
}

Тег

class Tag extends Model
{
    protected $fillable = ['name'];

    public function posts()
    {
        return $this->morphedByMany(Post::class, 'taggable')->withPivot('joined_at', 'current');
    }


    public function videos()
    {
        return $this->morphedByMany(Video::class, 'taggable')->withPivot('joined_at', 'current');
    }

}

Теперь.. когда я добавил новый Tag к Post мне нужно установить current ценность для true только для строки с макс.joined_at дата.. так что я попробовал

Создайте

Route::get('/create', function () {
    $post = Post::create(['name' => 'second Post']);
    $tag1 = Tag::find(1);
    $post->tags()->save($tag1, ['joined_at' => '2019-7-5', 'current' => true]);
    foreach ($post->tags as $tag) {
        $tag->pivot->current = true;
        $tag->pivot->save();
        // dd($tag);
    }

});

Обновить

Route::get('/update', function () {
    $post = Post::findOrFail(1);
    $tag1 = Tag::find(1);
    $post->tags()->attach($tag1, ['current' => 0, 'joined_at' => '2019-07-03']);

    foreach ($post->tags as $tag) {
        $tag->pivot->current = 0;
        $tag->pivot->save();
    }

    $maxPost = $post->tags()->orderBy('joined_at', 'desc')->first();
    $maxPost->pivot->update(['current' => 1]);

});

но что на самом деле происходит current значение для всех строк превратилось в trueКак это решить? и есть ли элегантный способ достичь того, чего я хочу!!?

0 ответов

Другие вопросы по тегам