2017-03-20 1 views
0

Wenn ich auth()->user()->roles() mit Kesselflicker verwenden funktioniert es ohne Probleme, aber wenn ich es auf der Webseite verwenden, selbst ich :BadMethodCallException in Builder.php Linie 2405: Aufruf der undefinierten Methode Illuminate Database Abfrage Builder :: addEagerConstraints()

BadMethodCallException in Builder.php line 2405: 
Call to undefined method Illuminate\Database\Query\Builder::addEagerConstraints() 

Was bedeutet das, was könnte der Grund dafür sein? Hier ist das zugehörige Modell:

class User extends Authenticatable 
{ 
    public function roles(){ 
     return Role::where('id', 6); 
    } 
} 

Ich benutze Laravel 5.2 und der vollständige Fehler ist wie folgt.

PS: Ich denke, das Problem hat etwas mit der Art zu tun, wie ich es in anderen Teilen der Website verwende. Deshalb funktioniert es beim Basteln. die anderen Teile sehen aus, als ob sie das Ergebnis der Form Relation Obj erfordern, die ich nach der Where-Abfrage nicht bereitstellen kann.

BadMethodCallException in Macroable.php line 74: 
Method addEagerConstraints does not exist. 
in Macroable.php line 74 
at Collection->__call('addEagerConstraints', array(array(object(User), object(User)))) in Builder.php line 667 
at Collection->addEagerConstraints(array(object(User), object(User))) in Builder.php line 667 
at Builder->loadRelation(array(object(User), object(User)), 'roles', object(Closure)) in Builder.php line 645 
at Builder->eagerLoadRelations(array(object(User), object(User))) in Builder.php line 322 
at Builder->get() 
at call_user_func_array(array(object(Builder), 'get'), array()) in Relation.php line 343 
at Relation->__call('get', array()) in Relation.php line 113 
at BelongsTo->get() in Relation.php line 113 
at Relation->getEager() in Builder.php line 676 
at Builder->loadRelation(array(object(Comment), object(Comment), object(Comment)), 'user', object(Closure)) in Builder.php line 645 
at Builder->eagerLoadRelations(array(object(Comment), object(Comment), object(Comment))) in Builder.php line 322 
at Builder->get() in ModuleController.php line 27 
at ModuleController->main(array()) 
at call_user_func_array(array(object(ModuleController), 'main'), array(array())) in Container.php line 507 
at Container->call(array(object(ModuleController), 'main'), array(array())) in Container.php line 602 
at Container->callClass('\App\Modules\Preview_coupons_comments\Controllers\[email protected]', array(array()), null) in Container.php line 502 
at Container->call('\App\Modules\Preview_coupons_comments\Controllers\[email protected]', array(array())) in Facade.php line 219 
at Facade::__callStatic('call', array('\App\Modules\Preview_coupons_comments\Controllers\[email protected]', array(array()))) in PageController.php line 220 
at App::call('\App\Modules\Preview_coupons_comments\Controllers\[email protected]', array(array())) in PageController.php line 220 
at PageController->getPageByName() 
at call_user_func_array(array(object(PageController), 'getPageByName'), array()) in Controller.php line 80 
at Controller->callAction('getPageByName', array()) in ControllerDispatcher.php line 146 
at ControllerDispatcher->call(object(PageController), object(Route), 'getPageByName') in ControllerDispatcher.php line 94 
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96 
at ControllerDispatcher->callWithinStack(object(PageController), object(Route), object(Request), 'getPageByName') in ControllerDispatcher.php line 54 
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\PageController', 'getPageByName') in Route.php line 174 
at Route->runController(object(Request)) in Route.php line 140 
at Route->run(object(Request)) in Router.php line 724 
at Router->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckActive.php line 23 
at CheckActive->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(CheckActive), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 64 
at VerifyCsrfToken->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64 
at StartSession->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59 
at EncryptCookies->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Router.php line 726 
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699 
at Router->dispatchToRoute(object(Request)) in Router.php line 675 
at Router->dispatch(object(Request)) in Kernel.php line 246 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Debugbar.php line 51 
at Debugbar->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(Debugbar), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) 
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 103 
at Pipeline->then(object(Closure)) in Kernel.php line 132 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99 
at Kernel->handle(object(Request)) in index.php line 54 
at require_once('/Users/skeletor/Sites/project/public/index.php') in server.php line 21 

dies ist die dd der normalen Beziehung $this->belongsToMany(Role::class);

BelongsToMany {#971 ▼ 
    #table: "role_user" 
    #foreignKey: "user_id" 
    #otherKey: "role_id" 
    #relationName: "roles" 
    #pivotColumns: [] 
    #pivotWheres: [] 
    #pivotWhereIns: [] 
    #pivotCreatedAt: null 
    #pivotUpdatedAt: null 
    #query: Builder {#996 ▶} 
    #parent: User {#319 ▶} 
    #related: Role {#812 ▶} 
} 

und dies ist die return Role::where('id', 6); ein

Builder {#812 ▼ 
    #query: Builder {#317 ▶} 
    #model: Role {#997 ▶} 
    #eagerLoad: [] 
    #macros: [] 
    #onDelete: null 
    #passthru: array:11 [▶] 
    #scopes: [] 
    #removedScopes: [] 
} 

sie ganz anders aussehen verändert und dies kann der Grund.

Als @SimonSvensson gefragt, hier ist meine Comment Modell

class Comment extends Model 
{ 

    /** 
    * Fields that can be mass assigned. 
    * 
    * @var array 
    */ 
    protected $fillable = ['active', 'user_id', 'text', 'url']; 

    /** 
    * Comment morphs to models in commentable_type. 
    * Get all of the owning commentable models. 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\MorphTo 
    */ 
    public function commentable() 
    { 
     // morphTo($name = commentable, $type = commentable_type, $id = commentable_id) 
     // requires commentable_type and commentable_id fields on $this->table 
     return $this->morphTo(); 
    } 

    /** 
    * Query scope ofWebsite. 
    * 
    * @param \Illuminate\Database\Eloquent\Builder 
    * @return \Illuminate\Database\Eloquent\Builder 
    */ 
    public function scopeOfWebsite($query) 
    { 
     return $query->where(function($q){ 
      $q->whereNull('commentable_id')->whereNull('commentable_type'); 
     }); 
    } 

    /** 
    * Comment belongs to User. 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
    */ 
    public function user() 
    { 
     // belongsTo(RelatedModel, foreignKey = user_id, keyOnRelatedModel = id) 
     return $this->belongsTo(User::class); 
    } 

} 
+0

Können Sie die genaue Laravel-Version, die Sie verwenden, und die vollständige Stapelverfolgung des Fehlers angeben? – sisve

+0

sicher @SimonSvensson, ich werde es hinzufügen (bearbeiten). – Skeletor

+0

Können Sie uns das Kommentar-Modell zeigen? – sisve

Antwort

1

Es sieht aus wie Sie die user.roles Beziehung zu eifrig laden sind versucht, aber es ist keine richtige Beziehung, es ist nur ein Methode, die einen Aufruf von Role :: where (...) aufruft. Beziehungsmethoden geben normalerweise etwas wie $this->hasMany(Role::class) zurück.

+0

Ja du bist richtig, ich werde es aus dieser Perspektive überdenken. – Skeletor

Verwandte Themen