2014-11-03 91 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)抱怨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 
) 

有道理,不夠公平,所以我改變了名單

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

以爲命名錶和列應該修復它,但發現該列表功能減退的「性格」。部分等都有相同的錯誤。

它似乎列表可能不使用點符號,帶我到我的問題......我可以逃避點符號或有另一種方式來獲得ID的列表作爲數組?

非常感謝

回答

11

可以使用lists之前別名列名:

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

這將避免任何列名衝突。

+1

那先生,是最優秀的。這種簡單的解決方案。非常感謝。 – 2014-11-03 18:51:35

+0

非常歡迎。 – Bogdan 2014-11-03 18:54:28

+0

Laravel 5仍是一個問題,這仍然可以解決問題。 – ShaunUK 2015-05-12 15:25:56