Laravel hasMany-Methode funktioniert nicht

Ich habe 2 Tabellen, users und websites. Ein Benutzer kann mehreren websites zugeordnet werden.

public function websites() {
    return $this->hasMany('App\Models\Website');
}

Den Fehler den ich bekomme, ist:

Object of class Illuminate\Database\Eloquent\Relations\HasMany could not be converted to string

Wenn ich versuche, Ausgabe, die es als ein array mit print_r bekomme ich Hunderte von Zeilen-array, die ich gehe davon ist, verursacht durch einen Fehler irgendwo.

Auch, warum ich App\Models\Website im hasMany Methode, wenn ich angegeben, an der Spitze der User Modell use App\Models\Website;?

Wenn ich nur Website in der Methode, bekomme ich die Klasse nicht gefunden Fehler:

Class 'Website' not found

Nicht eine große Sache, aber es wäre viel sauberer, nicht zu haben, um den vollen namespace-Pfad.

Den code in den controller:

<?php namespace App\Http\Controllers;

use DB;
use App\User;

class DashboardController extends Controller {

    /*------------------------------------------------------------------
        Dashboard page
    -------------------------------------------------------------------*/
    public function show() {

        //$user = auth()->user();
        $user = User::find(5);

        return $user->websites();

        //return view('dashboard');
    }

};
  • Wenn Sie nicht wollen, um die Referenz der vollständige namespace in der Beziehung, die Sie verwenden können, die PHP 5.5 ::class statischen Verweis. return $this->hasMany(Website::class);. Für deine eigentliche Frage, wie sind Sie zu benutzen versuchen, die Beziehung? Was wollen Sie erreichen? $user->websites werden Sie wieder eine Collection/Array der Ergebnisse in der Erwägung, dass $user->websites() werden Sie wieder eine query-Instanz zur Abfrage der Webseiten, die dem Benutzer gehören.
  • Ich versuche nur, um alle websites, die der Benutzer hat. Ich kann ihn einfach wie dieses $websites = Website::where('user_id', '=', $user->id)->get(); aber ich wollte die Methode gereinigt, wenn Sie und auch herausfinden, warum dieser Methode ist nicht für mich arbeiten.
  • Haben Sie gezielt setzen Sie Ihre Modelle in App\Models`? By default they are just inside App` und so würden Sie darauf verweisen, wie App\Website.
  • Auch, ich nehme es, dass Ihre website Tabelle verweist auf den Benutzer, der Sie besitzt, in eine Spalte namens user_id gegeben, die Sie noch nicht angegeben, eine andere Spalte?
  • Ja habe ich alle meine Modelle von innen App\Models. Nur eine in der App Benutzer, die die Standard-Modell. Ich kann bewegen, die zu der App\Models später auch.
  • Ja, das ist auch korrekt. Es ist ein user_id Spalte in der websites Tabelle. Wie ich bereits in dem anderen Kommentar kann ich problemlos abrufen, dass Informationen mithilfe von query builder. Ich versuche nur, um zu sehen, warum es funktioniert nicht auf diese andere Art und Weise

InformationsquelleAutor zen | 2016-01-02
Schreibe einen Kommentar