2016-07-01 8 views
1

In meinem Modell habe ich geschütztes $ table hinzugefügt, aber wenn ich es benutzen werde, benutzt laravel es nicht. Dies ist meine Vorbilder:laravel eloquent verwendet keinen geschützten Tabellennamen

class Role extends Model 
{ 
    protected $table = 'role'; 

    protected $primaryKey = 'ROLE_ID'; 

    protected $casts = [ 
     'ACTIVE' => 'boolean', 
    ]; 

    protected $fillable = [ 
     'ROLE', 'ACTIVE', 'TYPE' 
    ]; 

    public $timestamps = false; 

    public function groups() 
    { 
     return $this->belongsToMany(Group::class, GroupRole::class, 'ROLE_ID', 'GROUP_ID'); 
    } 
} 

Und das ist Gruppenmodell:

class Group extends Model 
{ 
    protected $table = 'groups'; 

    protected $primaryKey = 'GROUP_ID'; 

    protected $fillable = [ 
     'GROUP_ID', 'GROUP_NAME', 'PARENT_GROUP', 'ACTIVE' 
    ]; 

    protected $casts = [ 
     'ACTIVE' => 'boolean', 
    ]; 

    public $timestamps = false; 

    public function type() 
    { 
     return $this->belongsTo(GroupType::class, 'TYPE', 'TYPE_ID'); 
    } 

    public function roles() 
    { 
     return $this->belongsToMany(Role::class, GroupRole::class, 'GROUP_ID', 'ROLE_ID'); 
    } 
} 

Und das ist group_role Tischmodell. Es behandelt viele zu viele Beziehung zwischen Rolle und Gruppe:

Problem beginnt, wenn ich diese Modelle verwenden möchte. Zum Beispiel:

$role = App\Role::first(); 
$groups = $role->groups; 

Laravel gibt diese Fehlermeldungen:

SQLSTATE [42S02]: Basistabelle oder Ansicht nicht gefunden: 1146 Table 'favian_mydb.App \ GroupRole' existiert nicht (SQL: wählen groups. *, App\GroupRole. ROLE_ID als pivot_ROLE_ID, App\GroupRole. GROUP_ID als pivot_GROUP_ID von groups Exklusionsverknüpfung App\GroupRole auf groups. GROUP_ID = App\GroupRole. GROUP_ID wo App\GroupRole. ROLE_ID = 1)

Ich habe versucht, App \ GroupRole durch group_role zu ersetzen und in mysql auszuführen. Es funktioniert gut. Fehle ich etwas?

Antwort

1

Das Problem ist in Ihrer roles Beziehung:

public function roles() 
{ 
    return $this->belongsToMany(Role::class, GroupRole::class,'GROUP_ID','ROLE_ID'); 
} 

Die belongsToMany erwartet, dass die Zwischen Tabelle Namen als zweites Argument, nicht die Klasse Namen.

So haben Sie es wie folgt zu definieren:

public function roles() 
{ 
    return $this->belongsToMany(Role::class, 'group_role','GROUP_ID','ROLE_ID'); 
} 
0

Ich denke, das Problem liegt in Ihren Relationsfunktionen. Versuchen Sie, Zeichenfolgen anstelle von Model :: class zu verwenden.

Beispiel:

return $this->return $this->belongsTo('App\GroupType', 'TYPE', 'TYPE_ID');

Hoffnung das funktioniert.

+0

Nein, es funktioniert nicht. –