2016-11-17 5 views
0

Ich habe einen Fehler mit meiner App, es sieht alles gut aus, aber erstellt eine falsche Abfrage, aber ich habe meine Tabellen und Modelle richtig, im Grunde habe ich eine Registrierung eines Benutzers kann mehrere Regionen und Branchen/Gebiete auswählen. Mein Fehler ist:Erstellen von Datensätzen mit Beziehungen zwischen mehreren Regionen und Branchen

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'hjobs.region_user' doesn't exist (SQL: select `region_id` from `region_user` where `user_id` is null) 

Modell Benutzer:

public function regionsToWork(){ 

     return $this->belongsToMany(Region::class); 
    } 

    public function industriesToWork(){ 
     return $this->belongsToMany(Industry::class); 
    } 

AuthController:

$user = new User(); 
$user->name = $data['name']; 
    ... 

$user->regionsToWork()->sync($data['region'], false); 
$user->industriesToWork()->sync($data['industry'], false); 
$user->save(); 

Tables DB: USER: 

    -id; 
    -email 
    ... 

user_industry: 

id; 
user_id; 
industry_id; 
user_region: 

id; 
user_id; 
region_id; 

Migrations user_region_table_creation

Schema::create('user_region', function($table){ 
      $table->increments('id'); 
      $table->integer('user_id')->unsigned(); 
      $table->foreign('user_id')->references('id')->on('users'); 

      $table->integer('region_id')->unsigned(); 
      $table->foreign('region_id')->references('id')->on('regions'); 
     }); 

user_industry_table_creation

Schema::create('user_industry', function($table){ 
      $table->increments('id'); 
      $table->integer('user_id')->unsigned(); 
      $table->foreign('user_id')->references('id')->on('users'); 

      $table->integer('industry_id')->unsigned(); 
      $table->foreign('industry_id')->references('id')->on('industries'); 
     }); 

Antwort

1

Es sieht so aus, als wäre der Name der Pivot-Tabelle anders als erwartet, region_user im Gegensatz zu user_region.

Sie können manuell die Pivot-Tabelle Namen in Ihrem belongsToMany Methode wie folgt angeben:

return $this->belongsToMany(Region::class, 'user_region'); 
+0

sorry, für letzte Antwort, jetzt mir diese Fehlermeldung „SQLSTATE schenkt [23000]: Integrität Einschränkungsverletzung: 1048 Spalte ' user_id 'darf nicht null sein (SQL: Einfügen in 'user_region' (' region_id', 'user_id') Werte (54,))" –

+0

Es bedeutet, dass Sie keine user_id übergeben, was ein separates Problem ist, vielleicht synchronisieren Sie NACH dem Speichern Der Benutzer hat also eine ID zu verwenden? Auf der positiven Seite bedeutet es, dass es jetzt erfolgreich die richtige Tabelle verwendet. –

+0

Ihr Recht, ich habe nur die -> Sync-Methoden nach dem Speichern() aktualisiert, und funktioniert gut, danke –

Verwandte Themen