2013-09-04 6 views
1

일치하는 요소 만 사용하여 필터 결과를 출력하려고합니다.Laravel 4 Eager 로딩 필터링 및 일치하는 결과 만 선택

내가 (5됩니다 실제 프로젝트에서) 두 테이블을 가지고, 이제 companiesprojects을 가정 해 봅시다. 회사는 하나 이상의 프로젝트를 보유하고 있거나 보유하지 않을 수 있습니다. ,

/app/models/Company.php

<?php 

class Company extends Eloquent { 

    public function projects() { 
     return $this->hasMany('Project','companyID'); 
    } 

    protected $table = 'companies'; 


} 

/app/models/Project.php

<?php 

class Project extends Eloquent { 

    public function companies() { 
     return $this->belongsTo('Company','companyID'); 
    } 

} 

내가하고 싶지는 다음과 같습니다

이러한 관계입니다 둘 다 결과를 얻고 싶지만 일치하는 매개 변수 만 사용해야합니다.

I이 시도했다 :

return Company::with(array('projects'=>function($query){ 
    $query->where('id',99); //project's id is 99 
}))->get(); 

This is the output JSON

제가 99에서 1의 값을 변경하는 경우는 (1 products.id와 결과가)는 this으로 변경 :

나는 단지 내가을 게시 한 두 번째 JSON에서 두 번째 결과를 얻을 싶어요.

당신이 (내가 확인 this parser을 사용하고 있습니다) 두 번째 JSON에서 볼 수 있듯이, 모든 기업에 관계없이 프로젝트의로드, 만 행은 객체 projects이 일치합니다.

은의와 '더있을 것이고, 나는 단지 일치하는 요소를 필터링하는 방법을 모르겠어요.

은 또한 폐쇄 내부 having()했지만, 여전히 동일한 같습니다

$query->having('projects.id','=',99); 

출력이 유사한 프로젝트를 갖는 결과 만 포함한다 (루프를 사용하지 않고) 만 매칭 결과를 필터링하는 방법이 있는가 목적?

편집 : 사실, 5 개 테이블이을 필터링됩니다.

companies, projects, works, usersuser_works

는의가 있다고 가정 해 봅시다; "회사"에는 많은 프로젝트가 있습니다. "프로젝트"에는 많은 작품이 있습니다. "작품"에는 많은 사용자가 있고 "사용자"에는 하나 이상의 작품 (피봇 테이블 user_works)이있을 수도 있습니다.

모든 관계는 모델에서 올바르게 설정됩니다.

나는이에 글로벌 검색을 수행 할 수 있습니다. 같은

뭔가 : "나에게 5의 회사 ID와 4의 프로젝트 ID를 가진 사용자 ID를 하나의 작품을 가져와"하지만 필드 중 어느 것도 필수 없습니다. 이것들은 "프로젝트 ID 2에 모든 사람의 작품 가져 오기"또는 "ID 2 작품 가져 오기"또는 "오늘부터 모든 작품 가져 오기", "ID 1 작품을 가져와 프로젝트 2 ","회사 ID 1의 올해의 작품을 가져와 ". 사전

답변

1

whereHas()을 사용하는 것이 제 경우의 해결책입니다. 관계를 필터링하고 기본 쿼리에서 반환 된 결과에 영향을줍니다.

0

에서

덕분에 당신은 그 길을 갈 더 나을 프로젝트의 ID가 있다면? $project = Project::find(99); 다음 회사 변수는이 프로젝트는 오직 하나에 속하기 때문에 company()companies() 기능 이름을 붙이는 게 더 적합 할 것 $project->companies->name;

에 액세스 할 수있다.

+0

[여기] (http://forums.laravel.io/viewtopic.php?pid=53511#p53511)부터 시작하는 토론을 확인해 주실 수 있습니까? 보기보다 복잡합니다 (실제로 4 개의 테이블이 관련되어 있음). – Arda