2013-12-21 2 views
5

Laravel 설명서에서이 구문을 사용하여 개체 관계를 쿼리하여 하나 이상의 설명이있는 게시물 만 가져옵니다.Laravel 쿼리 관계 모델 :: has ('relation')가 작동하지 않습니다.

$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 ::를 잘못하고있는 것을 알아낼 수 없다.

나는 작곡가로 만든 laravel 프로젝트에 포함 된 sqlite3 데이터베이스를 사용하고 있습니다. 이것은 구조와 데이터입니다 :

+0

또한 '가지고있는'방법이 어디서 발생하는지 알 수 없습니다. Model 클래스에는 'has'메소드가 없습니다. – Mat

+0

이 방법은 API 설명서에 설명되어 있습니다. [여기] (http://laravel.com/api/master/Illuminate/Database/Eloquent/Builder.html#method_has) –

+0

문제점을 파악 했습니까? 같은 문제가있는 것 같습니다. – Markus

답변

6

그러나 이것은 MySQL 드라이버에서 잘 작동합니다. SQLite를 데이터베이스 드라이버로 사용할 때 has은 개수가 따옴표로 묶여 있기 때문에 빈 컬렉션을 반환합니다. DB::raw 메서드를 사용하여 개수를 원시 표현식으로 전달할 수 있습니다.

$posts = Post::has('comments', '>=', DB::raw(1))->get(); 

관련 문제 : #3353, #3435.

편집 :patricus으로 확인이 문제는 Laravel 4.1.25 이전의 설치에만 영향을줍니다. 최신 버전에서는이 해결 방법을 사용할 필요가 없습니다.

+1

그 당시에는 사실 이었지만 버전 4.1.25부터 문제가 수정되었습니다. 이 정보를 추가 하시겠습니까? 이 질문에 맞기 때문에 대답을 변경할 필요가 없지만 사람들이 더 이상 이것을하지 않아도된다는 것을 알리는 편집을 추가하면 좋을 것입니다. 다른 사람이 방금이 문구를 사용하여이 답변에서 복사 한 질문을 게시했기 때문에이를 조사하라는 메시지가 표시되었습니다. – patricus