2016-08-13 6 views
2

Ich versuche, zwei Tabelle zu verbinden. Aber es ist gibt eine Fehlermeldung „Den Versuch, Eigentum von Nicht-Objekt zu erhalten“ ... Dies ist Code in Ansicht Seite:Laravel Join: Versuch, Eigenschaft von Nicht-Objekt zu bekommen

Asked by {{$user->name}} 

In meinem Controller habe ich Code wie diesen.

$user = DB::table('users') 
        ->join('question', function ($join) { 
      $join ->on('question.id', '=', 'users.id') 
        ->where('question.ques_id' , '=', '$id'); 
    }) 
        ->get(); 

Ich habe versucht, es wie Laravel Dokumentation zu tun. Warum tritt dieses Problem auf?

+0

Die Abfrage muss fehlgeschlagen sein deshalb '$ user' wurde nicht auf irgendetwas festgelegt und definitiv kein Objekt – RiggsFolly

+0

Ich habe versucht, zu wählen. Es hat nicht funktioniert. wie kann ich alles auf $ user setzen? $ user = DB :: tabelle ('benutzer') -> Join ('question', funktion ($ join) { $ join-> on ('question.id', '=', 'users.id ') -> where (' question.ques_id ',' = ',' $ id '); }) -> auswählen (' users.name ') -> get(); –

+0

'Join' sollte klein geschrieben sein und' $ id'' ohne '' ''. --- '$ id' ist auch null, weil es in ** anonyme Funktion ** ist. Versuchen Sie: 'function ($ join) use ($ id) {' –

Antwort

1

Ich konnte das Problem in Join nicht herausfinden, tat es auf eine alternative Weise.

$question = DB::table('question') 
       ->where('ques_id' , $id) 
       ->first(); 
$user = \App\User::find($question->id); 

Es war nicht befriedigend, aber die Arbeit erledigt.

3

join ist Name der Methode sollten Sie es lower-case wie Laravel Document lassen (siehe Advanced Join Statements)

$user = DB::table('users') 
        ->join('question', function ($join) { 
       $join->on('question.id', '=', 'users.id') 
        ->where('question.ques_id' , '=', $id); 
    }) 
        ->get(); 

Und btw ist $id ein variable sollten Sie es ohne ' ' verlassen oder " "

verwenden Ich denke, das Arbeit !

+0

Ihre Korrektur ist richtig, aber jetzt gibt es einen Fehler "Undefinierte Variable: ID". Ich habe versucht, $ ID als Argument übergeben und gescheitert. $ ID wird im oberen Segment des Codes ohne Fehler verwendet. –

+0

'$ id' ist eine' Variable', wo setzen Sie den Wert für diese 'Variable'. Kannst du mehr Code zeigen? –

+0

@DhrubaChakraborty http: // Stapelüberlauf.com/questions/29548073/laravel-advanced-wheres-how-to-pass-variable-in-funktion Ich fand es: D für anonyme Funktion –

1

Sie können eine einfache Verwendung kommen:

$user = DB::table('users') 
    ->join('question', 'question.id', '=', 'users.id') 
    ->where('question.ques_id' , '=', $id); 
    ->first() 
    ->get(); 

Aber wenn man die Dinge einfach halten wollen, sollten Sie Pröpper Ihre Entitäten definieren (User und Question) mit ihren Beziehungen:

Class Question extends Model 
{ 
    protected $table = 'question'; 
    protected $primaryKey = 'ques_id'; 

    public function user() 
    { 
     return $this->belongsTo(User::class, 'id'); 
    } 
} 

Und halten Sie den Controller-Code einfach:

$user = Question::find($id)->user; 

Hinweis: Sie sollten die Dinge Eigennamen geben. Wenn ich sehe question.id Ich denke, es ist die ID der Frage (nicht Benutzer).

Verwandte Themen