2016-10-29 4 views
0

ich dieses Modell verwenden, aber dieses Modell zeigt unten Fehler verwenden:Zugang zu belongsTo Verfahren in demselben Modell Laravel

Failed calling App\User::jsonSerialize() 

aber entfernen „$ this-> kunden-> name“ Ergebnis in Ordnung ist. thankssssssssssssssssssssssssssssssssssssssssssssssssssssssssss.

class User extends Authenticatable 
{ 

    /** 
    * Get the user's customer name. 
    * 
    * @param string $value 
    * @return array 
    */ 
    public function getCustomerIdAttribute($value) 
    { 
     return [ 
      'id' => $value, 
      'name' => $this->customer->name 
     ]; 
    } 

    /** 
    * The attributes that should be casted to native types. 
    * 
    * @var array 
    */ 
    protected $casts = [ 
     'customer_id' => 'array', 
    ]; 

    /** 
    * Get the customer record associated with the user. 
    */ 
    public function customer() 
    { 
     return $this->belongsTo(Customer::class); 
    } 
} 
+0

$ user = Auth :: Benutzer(); Rückgabe $ Benutzer; – HassanDL

Antwort

0

Ihr Problem ist, dass $this->customernull zurückkehrt, die $this->customer->name verursacht einen Fehler zu verursachen.

Wenn Sie json_encode ein Modell, oder konvertieren Sie es in eine Zeichenfolge, oder sonst rufen Sie toJson darauf, wird es die Methode aufrufen.

An einem bestimmten Punkt ruft dies Ihren getCustomerIdAttribute() Accessor auf, den Sie definiert haben. In diesem Accessor haben Sie die Anweisung $this->customer->name. Wenn das aktuelle Modell jedoch nicht mit einem Kundendatensatz verknüpft ist, gibt $this->customer den Wert null zurück, und dann wird $this->customer->name einen Fehler verursachen. Wenn $this->customer->name einen Fehler verursacht, schlägt jsonSerialize() fehl.

In Ihrem Accessor, so stellen Sie sicher, zu überprüfen, ob $this->customer bevor gültig ist, das name Attribut zuzugreifen:

public function getCustomerIdAttribute($value) 
{ 
    return [ 
     'id' => $value, 
     'name' => ($this->customer ? $this->customer->name : null) 
    ]; 
} 
+0

funktioniert nicht.danke. – HassanDL

+0

@HassanDL Und was "funktioniert nicht"? – patricus

+0

zeigen wieder denselben Fehler. Ich möchte den Kundennamen in allen Benutzer auswählen. – HassanDL

Verwandte Themen