В документации Laravel он говорит, что вы можете использовать этот синтаксис для запроса объект отношения, чтобы получить только сообщения, которые имеют по крайней мере один комментарий:Laravel Отношения Модель Выполнение запросов :: имеет («отношение») не работает
$posts = Post::has('comments')->get();
Я пытаюсь что-то подобное, когда хочу получить только объекты, имеющие хотя бы один объект отношения. Это мои два класса:
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");
}
}
Но когда я называю
$movies = Movie::has('matches')->get();
Я получаю пустую коллекцию. Если я называю
$movie = Movie::find(1)->matches()->get();
я получаю матч, что относится к кино, так что я знаю, что отношение настроено правильно. Я не могу понять, что я делаю неправильно с методом Movie ::.
Я использую базу данных sqlite3, включенную в проект laravel, созданный с помощью композитора. Ниже представлена структура и данные:
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
Кроме того, я не вижу, откуда приходит метод 'has'. Класс Model не имеет метода 'has'. – Mat
Метод описан в документации API: [здесь] (http://laravel.com/api/master/Illuminate/Database/Eloquent/Builder.html#method_has) –
Вы выяснили, в чем проблема? Похоже, иметь ту же проблему. – Markus