2013-08-07 3 views
0

Activity 모델과 Level 모델이 있습니다. 각 활동은 하나의 레벨을 가지고, 그래서 활동에 다음과 같은 한 :has() 메서드 사용 Laravel BelongsTo 관계

function level() 
{ 
    return $this->belongsTo('Level'); 
} 

을 그리고이 수준에 :

function activities() 
{ 
    return $this->hasMany('Activity'); 
} 
그때 특정 레벨을 가지고 활동을 검색 할 필요가

, 그래서 이 일을하고있다 :

$searchData = 'beginner'; 

$query = $query->has(array('level' => function($query) use ($searchData) 
{ 
    $query->where('name', 'LIKE', '%' . $searchData . '%'); 
})); 

을 이것은 LogicException 발생합니다 사용 :

,369을
Has method invalid on "belongsTo" relations. 

그래서 관계가 잘못되었거나 다른 방식으로 쿼리를 작성해야합니다.

제안 사항?

+0

'Level :: with ('activities ') -> ('name ', $ searchdata) -> get();' –

+0

@TryingTobemyself는 작동하지만 레벨 모델에서 검색하고 있습니다. . 다른 관계 (예 : 위치, 유형 등)가있는 활동을 검색 할 때 검색 쿼리를 활동 모델의 일부로 유지하는 것이 좋습니다. 가능하다면. –

+0

@RussBack 다음에 할 수있는 것은 'Level :: with (array ('activities', 'location', 'type')) -> 여기서 'name', function ($ query) use ($ searchData) { –

답변

0

이 글을 닫으려면 @TorkilJohnsen 님이 댓글을 달았습니다.

대다수의 관계와 피벗 테이블이있는 응용 프로그램의 다른 부분에서 코드를 가져 왔습니다. 내가 대신 ID를 가지고하지 않은 경우

하지만 그냥 관심 밖으로
$query->wherelevel_id(X) 

, 항목의 문자열을했다 : 처음부터 다시 보면, 활동 모델은 level_id 그래서 난 그냥이 작업을 수행 할 수있다 레벨 테이블에서, 내가 시도했던 방식으로 그것을 볼 수있는 방법이 있습니까? 아마도 레벨 이름을 찾고 ID를 반환하는 일종의 클로저일까요?