[英]Laravel SQL Query Returning Duplicates
I am trying to increase the speed of my Laravel 5.4 sql query by using joins, which I've never used before. 我正在尝试通过使用联接来提高Laravel 5.4 sql查询的速度,这是我以前从未使用过的。 I currently have the query working and returning results, my issue is that I get like each results around 8 times.
我目前有查询正在工作并返回结果,我的问题是每个结果大约得到8次。 Ex: I get the same 2001 Chevrolet Silverado 8 times in my array.
例:我在阵列中得到了8次相同的2001 Chevrolet Silverado。 If anybody could help me out I would really appreciate it.
如果有人可以帮助我,我将非常感激。 Thanks
谢谢
My query + collection: 我的查询+集合:
$tmp = DB::table('inventories'
)->join(
'vehicles', 'vehicles.id', '=', 'inventories.id'
)->join(
'vimages', 'vimages.vehicle_id', '=', 'inventories.id'
)->where(
'inventories.dealer_id', '=', $dealer_id
)->where(
'inventories.is_active', '=', 1
)->where(
'inventories.is_deleted','=', 0
)->select(
'inventories.stock_number','inventories.vehicle_id','vehicles.year','vehicles.make','vehicles.model','vehicles.vin','inventories.vehicle_status',
'inventories.cost','inventories.search_meta','vimages.name'
);
$data = collect();
$pmt = $tmp->get();
// return json_encode( $pmt );
// logger( sprintf('# of rows returned: %s', $pmt->count() ) );
$pmt->each( function($row) use(&$data) {
// logger( sprintf('Row : %s', $row->toJson() ));
$data->push( array(
'stock_number' => $row->stock_number,
'vehicle_id' => $row->vehicle_id,
'year' => $row->year,
'make' => $row->make,
'model' => $row->model,
// 'trim' => $row->trim,
'vin' => $row->vin,
'status' => $row->vehicle_status,
// 'purchase_price' => $row->purchase_price,
'cost' => $row->cost,
// 'retail_price' => $row->retail_price,
'search_meta' => $row->search_meta,
// 'images' => $row->getFirstImage()
'images' => $row->name
// 'interior_color' => $row->vehicle()->first()->interior_color,
// 'exterior_color' => $row->vehicle()->first()->exterior_color,
// 'firstImg' => $row->getFirstImage()
// 'images' => Vimage::select('vehicle_id','name'
// )->where(
// 'dealer_id', '=', $row->dealer_id
// )->where(
// 'vehicle_id', '=', $row->vehicle_id
// )->limit(1)->get()
));
});
Example of my array: https://i.imgur.com/FOphST8.png 我的数组示例: https : //i.imgur.com/FOphST8.png
I don't see your db table but I think there is problem in first join statment: you should use 我没有看到您的数据库表,但我认为第一次加入陈述存在问题:您应该使用
->join('vehicles', 'vehicles.id', '=', 'inventories.vehicle_id' )
instead of 代替
->join('vehicles', 'vehicles.id', '=', 'inventories.id' )
also second join should be like 也第二次加入应该像
->join('vimages', 'vimages.vehicle_id', '=', 'vehicles.id')
instead of 代替
->join('vimages', 'vimages.vehicle_id', '=', 'inventories.id')
It sounds trivial but this should work: 听起来微不足道,但这应该可行:
$tmp = DB::table('inventories'
)->join(
'vehicles', 'vehicles.id', '=', 'inventories.id'
)->join(
'vimages', 'vimages.vehicle_id', '=', 'inventories.id'
)->where(
'inventories.dealer_id', '=', $dealer_id
)->where(
'inventories.is_active', '=', 1
)->where(
'inventories.is_deleted','=', 0
)->selectRaw("DISTINCT inventories.stock_number, inventories.vehicle_id,
vehicles.year, vehicles.make, vehicles.model, vehicles.vin,
inventories.vehicle_status, inventories.cost,
inventories.search_meta, vimages.name"
);
Update : forgot to delete the single quotes in selectRaw
更新 :忘记删除
selectRaw
的单引号
Figured it thanks to @Devon. 感谢@Devon想通了它。 Added another where statement to query to only get first image.
添加了另一个where语句进行查询以仅获取第一张图像。
Thanks 谢谢
)->where('vimages.sequence','=', 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.