mikebronner / laravel-model-caching

Eloquent model-caching made easy.
MIT License
2.24k stars 213 forks source link

Trait method newEloquentBuilder has not been applied, because there are collisions #366

Open LiamAird opened 3 years ago

LiamAird commented 3 years ago

Describe the bug When using this package, together with other packages, that also use the newEloquentBuilder, it will fail, since two cannot use the same method two redo the eloquentBuilder, I suppose.

use GeneaLabs\LaravelModelCaching\Traits\Cachable;
use Kalnoy\Nestedset\NodeTrait;

class City extends Model
{
    use Cachable, NodeTrait;
}

Eloquent Query Please provide the complete eloquent query that caused the bug, for example:

Using the NodeTrait from Kalnoy, as mentioned above.

Route::get('tree', function() {
    App\Models\City::fixTree();
});

Stack Trace The full stack trace from your log file.

[2020-09-02 07:35:18] local.ERROR: Trait method newEloquentBuilder has not been applied, because there are collisions with other trait methods on App\Models\City {"exception":"[object] (Symfony\\Component\\ErrorHandler\\Error\\FatalError(code: 0): Trait method newEloquentBuilder has not been applied, because there are collisions with other trait methods on App\\Models\\City at /home/vagrant/finddet/app/Models/City.php:9)
[stacktrace]
#0 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(143): Symfony\\Component\\ErrorHandler\\Error\\FatalError->__construct()
#1 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(130): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->fatalErrorFromPhpError()
#2 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(0): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleShutdown()
#3 /home/vagrant/finddet/vendor/composer/ClassLoader.php(444): ()
#4 /home/vagrant/finddet/vendor/composer/ClassLoader.php(322): Composer\\Autoload\\includeFile()
#5 /home/vagrant/finddet/routes/web.php(111): Composer\\Autoload\\ClassLoader->loadClass()
#6 /home/vagrant/finddet/routes/web.php(111): spl_autoload_call()
#7 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Routing/Route.php(225): Illuminate\\Routing\\RouteFileRegistrar->{closure:/home/vagrant/finddet/routes/web.php:110-112}()
#8 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Routing/Route.php(199): Illuminate\\Routing\\Route->runCallable()
#9 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Routing/Router.php(685): Illuminate\\Routing\\Route->run()
#10 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Routing/Router.php:683-687}()
#11 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:126-132}()
#12 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle()
#13 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(77): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#14 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\VerifyCsrfToken->handle()
#15 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#16 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle()
#17 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(116): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#18 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(62): Illuminate\\Session\\Middleware\\StartSession->handleStatefulRequest()
#19 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Session\\Middleware\\StartSession->handle()
#20 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#21 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle()
#22 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#23 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\EncryptCookies->handle()
#24 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#25 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Routing/Router.php(687): Illuminate\\Routing\\Pipeline->then()
#26 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Routing/Router.php(662): Illuminate\\Routing\\Router->runRouteWithinStack()
#27 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Routing/Router.php(628): Illuminate\\Routing\\Router->runRoute()
#28 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Routing/Router.php(617): Illuminate\\Routing\\Router->dispatchToRoute()
#29 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\\Routing\\Router->dispatch()
#30 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): App\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:162-166}()
#31 /home/vagrant/finddet/vendor/beyondcode/laravel-query-detector/src/QueryDetectorMiddleware.php(33): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:126-132}()
#32 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): BeyondCode\\QueryDetector\\QueryDetectorMiddleware->handle()
#33 /home/vagrant/finddet/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(65): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#34 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle()
#35 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#36 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull->handle()
#37 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#38 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrimStrings->handle()
#39 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#40 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#41 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(63): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#42 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\CheckForMaintenanceMode->handle()
#43 /home/vagrant/finddet/vendor/fruitcake/laravel-cors/src/HandleCors.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#44 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): Fruitcake\\Cors\\HandleCors->handle()
#45 /home/vagrant/finddet/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#46 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(167): App\\Http\\Middleware\\TrustProxies->handle()
#47 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate\\Routing\\Pipeline->Illuminate\\Pipeline\\{closure:/home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:143-174}()
#48 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(140): Illuminate\\Routing\\Pipeline->then()
#49 /home/vagrant/finddet/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(109): App\\Http\\Kernel->sendRequestThroughRouter()
#50 /home/vagrant/finddet/public/index.php(55): App\\Http\\Kernel->handle()
#51 /home/vagrant/finddet/public/index.php(0): {main}()
#52 {main}
"} 

Environment

Additional context

This seems to be a general issue, when using these packages, that uses the same general commands. Presented in this issue: #137 https://github.com/lazychaser/laravel-nestedset/issues/360

mikebronner commented 3 years ago

Hi @LiamAird, thank you for submitting a new issue with all the relevant details. I will see if there is something that can be done to help with this, but unfortunately so far it has been very difficult for multiple packages that change the behavior of newEloquentBuilder to co-exist.

LiamAird commented 3 years ago

It seems that the general written work-around is to create a new trait, that implements this newEloquentBuilder trait - so that it is namespaced differently and therefore will not collide.

In my opinion this is not something that the general user should do, to make packages work - so if you can find a way to make it work, I'd be forever grateful! :) If not, we will have to find a way to make a trait ourselves and have it written up in the guides as a "work-around" fix to use this package with others, that utilizes the same methods.

mikebronner commented 3 years ago

@LiamAird I may have a solution for this, working on it now.

mikebronner commented 3 years ago

@LiamAird Could you give release 0.10.2 a try and let me know if that fixes the issue? Please see the readme section towards the top regarding conflicting packages as how to implement it. Thanks!

LiamAird commented 3 years ago

@mikebronner Any progress on this, since the latest change did not work as expected. Also seems like the latest conversation got deleted.

mikebronner commented 3 years ago

@LiamAird I am still working toward a full solution. I noticed after publishing 0.10.2 that it wasn't working as expected, and will hopefully have a solution in the near future.

C10ne commented 3 years ago

Any information on this? It's also blocking me to upgrade for some time.

mikebronner commented 3 years ago

@C10ne Can you install 0.10.1 in the meantime?

mefenlon commented 3 years ago

Is there any update on this? I am still having the collision issue on version 0.11.1

mikebronner commented 3 years ago

@mefenlon Hi, sorry, I have not been able to get to working on a solution for this yet due to a very chaotic past several months on my end.

mefenlon commented 3 years ago

Mike, Thank you for taking the time to reply. I hear you and hope the chaos subsides in the near future.

On Mon, Feb 8, 2021 at 1:37 PM Mike Bronner notifications@github.com wrote:

@mefenlon https://github.com/mefenlon Hi, sorry, I have not been able to get to working on a solution for this yet to to a very chaotic past several months on my end.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/GeneaLabs/laravel-model-caching/issues/366#issuecomment-775355612, or unsubscribe https://github.com/notifications/unsubscribe-auth/AHKI47KQYKXZEMJ6UKH5RD3S6AVN5ANCNFSM4QSTAOFQ .

Autonoma-Bauernfeind commented 1 week ago

Hey, any update on this? We would also like to use both traits parallel :)