Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Possible Conflict With Eloquent Taggable? #255

Closed
reasecret opened this issue May 25, 2019 · 4 comments
Closed

Possible Conflict With Eloquent Taggable? #255

reasecret opened this issue May 25, 2019 · 4 comments
Assignees
Labels

Comments

@reasecret
Copy link

reasecret commented May 25, 2019

Describe the bug
When laravel model caching enabled, I can't use eloquent taggable. Looks like there is a conflict with "tags" word.
I'm trying to update my post with new tags but there is an error:
Call to undefined method Cviebrock\EloquentTaggable\Models\Tag::flushCache()
But taggable package doesn't have flushCache function.

{
    "message": "Call to undefined method Cviebrock\\EloquentTaggable\\Models\\Tag::flushCache()",
    "exception": "BadMethodCallException",
    "file": "E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\ForwardsCalls.php",
    "line": 50,
    "trace": [
        {
            "file": "E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\ForwardsCalls.php",
            "line": 36,
            "function": "throwBadMethodCallException",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "::"
        },
        {
            "file": "E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Eloquent\\Model.php",
            "line": 1614,
            "function": "forwardCallTo",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "E:\\laragon\\www\\wpsc\\vendor\\genealabs\\laravel-model-caching\\src\\Traits\\Caching.php",
            "line": 189,
            "function": "__call",
            "class": "Illuminate\\Database\\Eloquent\\Model",
            "type": "->"
        },
        {
            "file": "E:\\laragon\\www\\wpsc\\vendor\\genealabs\\laravel-model-caching\\src\\Traits\\ModelCaching.php",
            "line": 77,
            "function": "checkCooldownAndFlushAfterPersisting",
            "class": "App\\Post",
            "type": "->"
        }

Eloquent Query

`$postTags = explode(",", $request->postTags);
$post->retag($postTags);`

Stack Trace

> [2019-05-25 03:29:51] local.ERROR: Call to undefined method Cviebrock\EloquentTaggable\Models\Tag::flushCache() {"userId":46,"exception":"[object] (BadMethodCallException(code: 0): Call to undefined method Cviebrock\\EloquentTaggable\\Models\\Tag::flushCache() at E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\ForwardsCalls.php:50)
> [stacktrace]
> #0 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\ForwardsCalls.php(36): Illuminate\\Database\\Eloquent\\Model::throwBadMethodCallException('flushCache')
> #1 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Eloquent\\Model.php(1614): Illuminate\\Database\\Eloquent\\Model->forwardCallTo(Object(Illuminate\\Database\\Eloquent\\Builder), 'flushCache', Array)
> #2 E:\\laragon\\www\\wpsc\\vendor\\genealabs\\laravel-model-caching\\src\\Traits\\Caching.php(189): Illuminate\\Database\\Eloquent\\Model->__call('flushCache', Array)
> #3 E:\\laragon\\www\\wpsc\\vendor\\genealabs\\laravel-model-caching\\src\\Traits\\ModelCaching.php(77): App\\Post->checkCooldownAndFlushAfterPersisting(Object(App\\Post), 'tags')
> #4 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Events\\Dispatcher.php(347): App\\Post::GeneaLabs\\LaravelModelCaching\\Traits\\{closure}(Object(App\\Post), Object(App\\Post), 'tags', Array, Array)
> #5 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Events\\Dispatcher.php(196): Illuminate\\Events\\Dispatcher->Illuminate\\Events\\{closure}('eloquent.pivotA...', Array)
> #6 E:\\laragon\\www\\wpsc\\vendor\\genealabs\\laravel-pivot-events\\src\\Traits\\ExtendFireModelEventTrait.php(46): Illuminate\\Events\\Dispatcher->dispatch('eloquent.pivotA...', Array)
> #7 E:\\laragon\\www\\wpsc\\vendor\\genealabs\\laravel-pivot-events\\src\\Traits\\FiresPivotEventsTrait.php(21): App\\Post->fireModelEvent('pivotAttached', false, 'tags', Array, Array)
> #8 E:\\laragon\\www\\wpsc\\vendor\\cviebrock\\eloquent-taggable\\src\\Taggable.php(125): GeneaLabs\\LaravelPivotEvents\\Relations\\MorphToManyCustom->attach(1)
> #9 E:\\laragon\\www\\wpsc\\vendor\\cviebrock\\eloquent-taggable\\src\\Taggable.php(60): App\\Post->addOneTag('WordPress')
> #10 E:\\laragon\\www\\wpsc\\vendor\\cviebrock\\eloquent-taggable\\src\\Taggable.php(98): App\\Post->tag(Array)
> #11 E:\\laragon\\www\\wpsc\\app\\Http\\Controllers\\PostAdminController.php(174): App\\Post->retag(Array)
> #12 [internal function]: App\\Http\\Controllers\\PostAdminController->update(Object(Illuminate\\Http\\Request), '40')
> #13 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Controller.php(54): call_user_func_array(Array, Array)
> #14 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('update', Array)
> #15 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php(219): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\PostAdminController), 'update')
> #16 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Route.php(176): Illuminate\\Routing\\Route->runController()
> #17 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(680): Illuminate\\Routing\\Route->run()
> #18 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #19 E:\\laragon\\www\\wpsc\\vendor\\zizaco\\entrust\\src\\Entrust\\Middleware\\EntrustRole.php(42): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #20 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Zizaco\\Entrust\\Middleware\\EntrustRole->handle(Object(Illuminate\\Http\\Request), Object(Closure), 'admin|site-edit...')
> #21 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #22 E:\\laragon\\www\\wpsc\\vendor\\zizaco\\entrust\\src\\Entrust\\Middleware\\EntrustRole.php(42): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #23 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Zizaco\\Entrust\\Middleware\\EntrustRole->handle(Object(Illuminate\\Http\\Request), Object(Closure), 'admin|site-edit...')
> #24 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #25 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Middleware\\SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #26 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #27 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #28 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken.php(75): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #29 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #30 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #31 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\View\\Middleware\\ShareErrorsFromSession.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #32 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #33 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #34 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Session\\Middleware\\StartSession.php(56): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #35 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #36 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #37 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #38 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #39 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #40 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Cookie\\Middleware\\EncryptCookies.php(66): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #41 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #42 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #43 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #44 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(682): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
> #45 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(657): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
> #46 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(623): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
> #47 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Router.php(612): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
> #48 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
> #49 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
> #50 E:\\laragon\\www\\wpsc\\vendor\\barryvdh\\laravel-debugbar\\src\\Middleware\\InjectDebugbar.php(65): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #51 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #52 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #53 E:\\laragon\\www\\wpsc\\vendor\\fideloper\\proxy\\src\\TrustProxies.php(57): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #54 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #55 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #56 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #57 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #58 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #59 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #60 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #61 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #62 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #63 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #64 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #65 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode.php(62): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #66 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
> #67 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #68 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Pipeline\\Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #69 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
> #70 E:\\laragon\\www\\wpsc\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
> #71 E:\\laragon\\www\\wpsc\\public\\index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
> #72 {main}
> "} 

Environment

  • PHP: [7.3.5]
  • OS: [Windows 10]
  • Laravel: [5.8.18]
  • Model Caching: [0.5.2]

I tried to remove model caching and there was no problem. Do you have any suggestion for this?

@mikebronner
Copy link
Owner

@reasecret Thanks for reporting this. After looking through their code, I believe the problem is that the Tag model isn't part of caching. The idea solution would be to extend the Taggable class and add the use Caching; trait

However, the secondary problem is that this package should not be calling caching methods on non-cached models. I will implement a fix for that shortly.

@mikebronner mikebronner self-assigned this May 25, 2019
@mikebronner
Copy link
Owner

@reasecret Could you give release 0.5.3 a try and let me know how that works?

Considerations

It should no longer try to call flushCache on non-cachable models. That means, of course, that without more additional work, the Tag model is not cached. It may be possible to extend the Tag model via the TagService, but I'm not sure about that, as I don't use that package.

@reasecret
Copy link
Author

Hi,

I've updated the package to 0.5.3 and created another Tag model based on original Tag model. And added use Cachable. Looks like problem solved for now. Thanks for your quick reply and fix.

@mikebronner
Copy link
Owner

Awesome, great to hear everything is working again. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants