2016-10-20 3 views
2

Ich habe eine Tabelle mit Spalte ID. Ich möchte einen Accessor für dieselbe Spalte erstellen.Laravel Accessor für ID-Spalte

Modell.

protected $table = 'repair_category'; 
protected $fillable = ['ID,','Name','Active','Background_Color','Icon_File_Name','ListOrder']; 
protected $primaryKey = 'ID'; 

Ich versuchte

public function getIDAttribute($value) 
{ 
    return Crypt::encrypt($value); 
} 

und

public function getIdAttribute($value) 
{ 
    return Crypt::encrypt($value); 
} 

Aber seine nicht funktioniert.

Bitte schlagen Sie einen Weg, um dieses Problem zu lösen.

+0

so zu lesen, was ist Ihr Primärschlüssel und wie definieren Sie es in Ihrem Modell? –

+0

Ich denke, es gibt ein Designproblem mit Ihrer Datenbank: Ihr Primärschlüssel sollte nur eine ganze Zahl sein und eindeutig sein. Ein verschlüsselter Inhalt kann eine Kollision erzeugen (zwei verschiedene Elemente, die den gleichen Hash erzeugen), also ist dies kein eindeutiges Element. Warum können Sie keine weitere Spalte für den verschlüsselten Inhalt erstellen? Und auch: warum müssen Sie Ihre IDs krypten? –

+0

@MarcBrillault, ich möchte die PK der Tabellenzeile vollständig aus dem Browser ausblenden. damit ich die ID aus der Tabelle kryptieren möchte. Ich kann das Ergebnis erhalten, wenn ich die PK-Spalte in ID ändere, aber ich möchte den Spaltennamen nicht ändern. – Jishad

Antwort

0

Versuchen von $ this-> Attribute [] in der Accessormethode

protected $primaryKey = 'ID'; 

public function getIDAttribute() 
{ 
    return Crypt::encrypt($this->attributes['ID']); 
} 
+0

Nicht mit Ihrer Antwort funktioniert, die Rückkehr ohne Verschlüsselung. – Jishad

+0

Art von seltsam, wie es gut für mich funktioniert - könnten Sie einen Code hinzufügen, der Sie denken lässt, dass es nicht funktioniert? Und übrigens. Ich habe gerade einen Tippfehler in Ihrem "fillable" entdeckt. Eigentlich sollte es keine "ID" geben, wenn es automatisch inkrementiert wird, aber es ist auch da mit einem nachlaufenden Koma. –