2017-05-01 3 views
0

Ich versuche, die Benutzer Profilinformationen zu zeigen, die angemeldet sind, habe ich zwei Tabellen ist eine Nachricht und andere ist Benutzer, wenn Benutzer anmelden es sehen ihr Profil, aber es ist ein Fehler.Versuch, Eigenschaft von Nicht-Objekt Laravel 5.3, profile.blade.php zu bekommen.

profile.blade:

<table class="table table-bordered"> 
    <thead> 
     <tr> 
      <th> 
       Name 
      </th> 
      <th> 
       Email 
      </th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach($users as $usr) 
     <tr> 
      <td> 
       {{$usr->name}} 
      </td> 
      <td> 
       {{$usr->email}} 
      </td> 
     </tr> 
     @endforeach 
    </tbody> 

Controller:

public function GetUserInfo($id){ 
    $user = DB::table('users') 
     ->join('messages', 'messages.user_id', '=', 'users.id') 
     ->where('users.id', '=', $id) 
     ->get(); 
    if($user->count()){ 
     $user = $user->first(); 
     return view('profile')->with('users',$user); 
    } 
} 

Modell:

class Messages extends Model 
{ 
    protected $table = 'messages'; 
    protected $fillable = [ 
     'message','user_id' 
    ]; 

    public function user() 
    { 
     return $this->hasOne('App\User', 'id', 'user_id'); 
    } 
} 
+0

Sollte nicht '$ Benutzer' in Blade-Datei von der sein '$ user' in Kopf' @ foreach' Schleife? – Ari

+0

Ihre Codes und Problembeschreibung vermittelt nicht Ihre Anforderung !! Kannst du etwas mehr erklären was du damit machen willst !!! Damit ich dir einen besseren Weg vorschlagen kann. –

+0

Primärschlüssel des Benutzers (ID) ist Fremdschlüssel in Nachricht (Benutzer-ID) und es gibt einen Controller der Nachricht Ich bekomme das Benutzerinformationsformular Benutzertabelle über Relation und Join. – Haider

Antwort

0

In

if($user->count()){ 
     $user = $user->first(); 
     return view('profile')->with('users',$user); 
    } 

first() wird für Abfragen aufgerufen, aber $user ist bereits als Laravel-Sammlung vorhanden, wenn die if-Anweisung eingegeben wird. Es sollte als Objekt oder als Array existieren und Sie können darauf zugreifen. Etwas wie

if($user->count()){ 
     $user = $user[0]; /*OR*/ 
     $user = $user->0; 
     return view('profile')->with('users',$user); 
} 

Ich erinnere mich nicht, welches der richtige Weg von der Spitze meines Kopfes ist. print_r($user) vorher zu sehen, wie es aussieht.

1

Wenn Daten auf diese Weise an Ansichten übergeben werden, sollte users ein Array sein.

ändern Controller wie folgt aus:

public function GetUserInfo($id){ 
    $user = DB::table('users') 
     ->join('messages', 'messages.user_id', '=', 'users.id') 
     ->where('users.id', '=', $id) 
     ->get()->toArray(); 
    if($user->count()){ 
     $user = $user->first(); 
     return view('profile')->with('users',$user); 
    } 
} 

Und Ansicht Ihr Profil Klinge:

<table class="table table-bordered"> 
    <thead> 
     <tr> 
      <th> 
       Name 
      </th> 
      <th> 
       Email 
      </th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach($users as $usr) 
     <tr> 
      <td> 
       {{$usr['name']}} 
      </td> 
      <td> 
       {{$usr['email']}} 
      </td> 
     </tr> 
     @endforeach 
    </tbody> 
Verwandte Themen