2017-12-21 3 views
-1

Ich arbeite mit einer Datenbank, in der ID-Spalte namens user_id.Laravel primaryKey override Ignoriert - Abfrage zurückgeben unbekannter Spaltenfehler

Ich habe die $ primaryKey override im Benutzermodell festgelegt, aber es ist immer noch auf der Suche nach id. Es erscheint, wenn das Benutzermodell Authenticatable erweitert, wird es ignoriert. Authentifizierbar erweitert modal, sollte also kein Problem sein, oder?

Ich habe viele Threads gesehen, in denen primaryKey override nicht funktioniert, aber nichts hat geholfen.

Fehler beim Zugriff auf Benutzer:

Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select count(*) as aggregate from `members` where `email` = [email protected] and `id` <> 1804) 

Benutzermodell:

namespace App; 
use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    use Notifiable; 

    protected $table = 'members'; 

    protected $primaryKey = 'user_id'; 

aktualisieren produziert Fehler:

public function rules() 
{ 
    $user = Auth::user(); 
    return [ 
     'email' => [ 
      'required', 
      'email', 
      Rule::unique($user->getTable())->ignore($user->getKey()), 
     ], 
     'first_name' => 'required', 
     'last_name' => 'required', 
    ]; 
} 

DB Säule:

Name | Type | Attributes | Null | Extra 
user_id (PrimaryKey) | int(60) | Unsigned | No | AUTO_INCREMENT 
+0

Bitte zeigen Sie den Code, der den Fehler generiert. –

+0

Können wir den 'Spaltentyp' aus der Datenbank sehen? – Ohgodwhy

+1

@Klav Ich glaube nicht, dass die Abfrage, die Sie gezeigt haben, generiert diese SQL 'Auswahl Anzahl (*) als Aggregat von Mitgliedern, wo E-Mail = [email protected] und ID <> 1804' –

Antwort

3

Die SQL-Anweisung sieht so aus, als ob die eindeutige Validierungsregel generiert würde. Es hat eine Syntax, um den Primärschlüssel anzugeben, wenn es nicht id ist.

If your table uses a primary key column name other than id, you may specify the name of the column when calling the ignore method:

'email' => Rule::unique('users')->ignore($user->id, 'user_id') 

Quelle: https://laravel.com/docs/5.5/validation#rule-unique, unter dem Absatz „eine einzigartige Regel Erzwingen einer gegebenen ID zu ignorieren“.

+1

Es ist lustig, wie Sie die Antwort mit dem Validierungscode von OP gepostet haben, 1 Minute bevor OP den Validierungscode zu seiner Frage hinzugefügt hat. –

+0

Danke, das war es. Also muss ich diese eindeutige Regel überall dort hinzufügen, wo Regeln für diese Tabelle verwendet werden? – Klav

Verwandte Themen