In der Laravel Dokumentation arbeiten sie sagt, dass Sie diese Syntax für die Abfrage ein Objekt Beziehung können nur die Beiträge zu erhalten, die mindestens einen Kommentar haben:Laravel Querying Relations Modell :: hat (‚Beziehung‘) nicht
$posts = Post::has('comments')->get();
Ich versuche etwas ähnliches, wo ich nur Objekte abrufen möchte, die mindestens ein Relation-Objekt haben. Das sind meine zwei Klassen:
class Movie extends Eloquent {
protected $table = 'movie';
public function matches() {
return $this->hasMany("Match");
}
}
class Match extends Eloquent {
protected $table = 'match';
public function movie() {
return $this->belongsTo("Movie");
}
}
Aber wenn ich rufe
$movies = Movie::has('matches')->get();
Ich erhalte eine leere Auflistung. Wenn ich rufe
$movie = Movie::find(1)->matches()->get();
Ich bekomme die Übereinstimmung, die sich auf den Film bezieht, so weiß ich, dass die Beziehung richtig eingerichtet ist. Ich kann nicht herausfinden, was ich falsch mache mit der Movie :: hat Methode.
Ich verwende die sqlite3-Datenbank, die in einem Laravel-Projekt enthalten ist, das mit Composer erstellt wurde. Dies ist die Struktur und die Daten:
sqlite> .schema movie
CREATE TABLE "movie" ("id" integer not null primary key autoincrement, "title" varchar not null);
sqlite> .schema match
CREATE TABLE "match" ("id" integer not null primary key autoincrement, "movie_id" integer not null, "title" varchar not null, foreign key("movie_id") references "movie"("id"));
CREATE INDEX match_movie_id_index on "match" ("movie_id");
sqlite> select * from movie;
1|Test Movie
sqlite> select * from match;
1|1|Test Movie Match
Auch kann ich nicht sehen, wo die "hat" Methode herkommt. Die Model-Klasse hat keine "HAS" -Methode. – Mat
Die Methode ist in der API-Dokumentation beschrieben: [hier] (http://laravel.com/api/master/Illuminate/Database/Eloquent/Builder.html#method_has) –
Hast du herausgefunden, was das Problem war? Scheint das selbe Problem zu haben. – Markus