Cache Not Clearing With morphTo/morphedByMany
reasecret opened this issue · 2 comments
I have Project, Service, User and Bookmark models. A user can bookmark a project, a service or another user.
Project, Service, Bookmark and User models are cachable.
User model:
public function bookmarkedProjects()
{
return $this->morphedByMany(Project::class, 'bookmarkable', 'bookmarks');
}
public function bookmarkedUsers()
{
return $this->morphedByMany(User::class, 'bookmarkable', 'bookmarks');
}
public function bookmarkedServices()
{
return $this->morphedByMany(Service::class, 'bookmarkable', 'bookmarks');
}
Bookmark model:
public function bookmarkable()
{
return $this->morphTo();
}
The problem is, when user deleted a bookmark, database record deleting but cache not flushing and there is no error. I have to use modelCache:clear. And if I remove Cachable from models there is no problem.
Delete function (Other functions are same. Except bookmarkable_type):
public function removeBookmarkedService(string $id)
{
Bookmark::where('bookmarkable_type', 'App\Models\Service')->where('user_id', Auth::user()->id)->where('bookmarkable_id', $id)->delete();
$this->emit('refreshPage');
}
Environment
- PHP: [8.1.3]
- OS: [Windows 10]
- Laravel: [9.18]
- Model Caching: [0.12.4]
Are there any other workarounds on this issue? aside from clearing model cache?
@reasecret Thanks for reporting this.
@bcaballero I believe this might be due to the MorphToMany relationship -- it probably isn't enforced in caching.
It would really help if you could contribute a PR with a failing test, or even with the complete solution.