2014-11-03 5 views
3

내가 가진 여러 사용 조인을 만드는 쿼리Laravel 4.2 웅변

public function scopePurchased($query, $userId) 
{ 

    return $query 
       ->join('products','characters.id','=','products.productable_id') 
       ->join('bundle_product','bundle_product.product_id','=','products.id') 
       ->join('bundles','bundles.id','=','bundle_product.bundle_id') 
       ->join('purchases','purchases.bundle_id','=','bundles.id') 
       ->join('users','purchases.user_id','=','users.id') 
       ->whereNull('purchases.deleted_at') 
       ->where('purchases.refunded', false) 
       ->where('products.productable_type', '=', get_class($this)) 
       ->where('users.id','=',$userId) 
       ->groupBy('characters.id') 
       ->orderBy('characters.title', 'ASC'); 

} 

그리고 내가 그렇게 다른 범위에서 사용이 쿼리에서 ID의 배열을 검색 할 :

$query->purchased($userID)->lists('id') 

나의 초기 생각은 ID에 대한 모호한 쿼리에 대해 불평하는 목록 ('id')을 사용하는 것이 었습니다. 내가 생각

$query->purchased($userID)->lists('characters.id') 

에 목록을 변경할 수 있도록

Column 'id' in field list is ambiguous 
(
SQL: select `id` from `characters` 
inner join `products` on `characters`.`id` = `products`.`productable_id` 
inner join `bundle_product` on `bundle_product`.`product_id` = `products`.`id` 
inner join `bundles` on `bundles`.`id` = `bundle_product`.`bundle_id` 
inner join `purchases` on `purchases`.`bundle_id` = `bundles`.`id` 
inner join `users` on `purchases`.`user_id` = `users`.`id` 
where `characters`.`deleted_at` is null 
and `purchases`.`deleted_at` is null 
and `purchases`.`refunded` = 0 
and `products`.`productable_type` = Character and `users`.`id` = 1 
group by `characters`.`id` 
order by `characters`.`title` asc 
) 

의미가 충분히 공정을 만드는 테이블의 이름을 지정하고 열을 수정해야하지만, 목록 기능이 떨어질 것을 찾는 '문자를.' 부분과 같은 오류가 발생했습니다.

목록에서 도트 표기법을 사용하지 않아서 제 질문에 대한 답변을 얻을 수 있습니다 ... 도트 표기법을 벗어날 수 있습니까? 아니면 ID 목록을 배열로 가져 오는 다른 방법이 있습니까?

많은 감사

답변

11

당신은 lists를 사용하기 전에 열 이름을 별칭 수 있습니다

$query->purchased($userID)->select('characters.id as _id')->lists('_id'); 

이는 열 이름 충돌을 방지 할 수 있습니다.

+1

저 선생님, 가장 우수합니다. 그런 간단한 해결책. 많은 감사합니다. –

+0

대단히 반갑습니다. – Bogdan

+0

아직 Laravel 5의 문제이며 여전히 해결책으로 사용됩니다. – ShaunUK