Mar*_*all 3 eloquent laravel-4
我有一个使用多个连接的查询:
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');
}
Run Code Online (Sandbox Code Playgroud)
我想从这个查询中检索一个ID数组,以便在另一个范围内使用,这样:
$query->purchased($userID)->lists('id')
Run Code Online (Sandbox Code Playgroud)
我最初的想法是使用列表('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
)
Run Code Online (Sandbox Code Playgroud)
有道理,足够公平,所以我将列表更改为
$query->purchased($userID)->lists('characters.id')
Run Code Online (Sandbox Code Playgroud)
认为命名表和列应该修复它,但发现list函数会删除'character'.部分因此具有相同的错误.
似乎列表可能不使用点符号,让我回答我的问题...我可以逃避点表示法还是有另一种方法可以将ID列表作为数组?
非常感谢
Bog*_*dan 12
您可以在使用前对列名称进行别名lists:
$query->purchased($userID)->select('characters.id as _id')->lists('_id');
Run Code Online (Sandbox Code Playgroud)
这样可以避免任何列名冲突.