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
Как это решить? и есть ли элегантный способ достичь того, чего я хочу!!?