2017-11-09 1 views
0

Mein Projekt funktioniert gut auf dem lokalen Host, aber auf dem Server, Fehler nur auf der Lektionsseite erhalten.Laravel Beziehung funktioniert nicht auf Server

Gegenstand Modell ist

class Subjects extends Model 
    { 
    public function category() 
    { 
     return $this->belongsTo('Lea\Category'); 
    } 
    public function lesson() 
    { 
     return $this->hasMany('Lea\Lessons'); 
    } 
    public function chapter() 
    { 
     return $this->hasMany('Lea\Chapters'); 
    } 
    public function users() 
    { 
     return $this->belongsToMany('Lea\User', 'subject_user', 'subject_id', 'user_id'); 
    } 
    } 

Und Lektion Modell ist

class Lessons extends Model 
{ 
    public function chapter() 
    { 
     return $this->belongsTo('Lea\Chapters'); 
    } 
    public function subject() 
    { 
     return $this->belongsTo('Lea\Subjects', 'subject_id'); 
    } 
    public function category() 
    { 
     return $this->belongsTo('Lea\Category'); 
    } 

} 

Mein Controller Lektionen Methode Index wie unten hat.

public function index() 
    { 

     $lessons = lessons::orderBy('id', 'asc')->paginate(5); 
     return view('admin.lessons.index')->withLessons($lessons); 
    } 

Die Art und Weise, wie ich den Betreff-Namen anrufe, ist unten angegeben. Das erste Subjekt ist das Beziehungssubjekt und das zweite Subjekt ist der Feldname, in dem der Subjektname in db gespeichert ist. foreach erhalten Daten wie:

@foreach ($lessons as $lesson) 
{{$lesson->subject->subject}} 
@endforeach 

Themen Tabellenschema

id 
subject 
admin_id 
users_id 
category_id 
created_at 
updated_at 

Lektionen Tabellenschema

id 
title 
slug 
category_id 
subject_id 
chapter_id 
users_id 
content 
image 
+0

Was in Ihren Tabellen Feldnamen sind? Ist es möglich, dass Sie der gleichen Logik wie subject_id und subject_user gefolgt sind und tatsächlich das Feld "subject_name" benannt haben? Das Problem scheint in Ihrer Betreff-Tabelle – Luke

+0

zu sein, wenn der Feldname ein Problem ist, dann sollte es mir eine json-Ausgabe geben, die diesen Code {{$ lesson-> subject}} setzt, aber ich bekomme null auf dem Server, aber json auf localhost –

+0

beharrst du das $ lektionsobjekt für deine Ansicht durch deinen Controller? – Luke

Antwort

0

ist, dass mehr wie es ist;)

einfach bearbeiten, wie Sie Übergeben Sie das Objekt an Folgendes:

... 
return view('admin.lessons.index')->with(compact('lessons')); 

Was dies tut:

compact() im Wesentlichen nimmt das Objekt/Variable durch seinen Namen ($ Lektionen) und leitet sie mit dem gleichen Namen der Ansicht.

Eine alternative Möglichkeit ist es, als zu schreiben:

... 
return view('admin.lessons.index')->with('lessons', $lessons); 

Prost!

+0

Rückgabe ist kein Problem, ich erhalte keine Beziehungswerte mit meiner Methode. Nur der Beziehungswert für Lektion und Thema wird nicht angezeigt, während die Beziehung zur Kategorie ebenfalls funktioniert –

+0

Warum ist Ihr Feldname subject_id? Wäre es nicht einfacher, behalte es einfach als ID? Wenn Sie sagen, dass die Kategorie funktioniert, kann es sich um ein Problem mit dem Primärschlüssel handeln, den Sie für die Betreff-Tabelle definieren. – Luke

+0

sein Fremdschlüssel in der Lektionstabelle. –

0

Der Grund für den Fehler auf Ihrem Server, aber nicht auf Ihrem lokalen Computer ist, dass Ihre Server-Datenbank leer ist (oder zumindest weniger Datensätze hat).

{{$lesson->subject->subject}}

Die Lektion hat kein Thema, es ist also null. Und Ihr Versuch, eine Eigenschaft subject einer Null zu bekommen.

Wenn Sie Laravel 5.5 verwenden, können Sie den Betreff in die Methode optional() umbrechen.

{{optional($lesson->subject)->subject}}

< Laravel 5,5 {{$lesson->subject ? $lesson->subject->subject : ''}}

Verwandte Themen