修改Laravel查询来获取在单个查询,而不是针对图像的单独的子查询性能和图像

问题描述 投票:-1回答:1

我首先从表'属性'获取属性,然后运行内部查询以从单独的表'property_images'获取图像。这是一种缓慢的方法。指导我如何在api请求中的单个查询中获取属性和图像?

public function searchProperty(Request $request){
        if(count($request->all()) > 0){
            $properties = array();
            $properties = \DB::table('properties')
            ->where($request->all())
            ->get()->toArray();
            $prop_ids = array();
            if(isset($properties) && !empty($properties) && count($properties) > 0){
                foreach($properties as $prop){
                    array_push($prop_ids, $prop->id);
                }
                $prop_images = \DB::table('property_images')
                    ->whereIn('property_id', $prop_ids)
                    ->get()->toArray();
                if(isset($prop_images) && !empty($prop_images)){
                    foreach($prop_images as $imgs){
                        $upload_path = storage_path() . '/uploads/property/' . $imgs->property_id .'/'.$imgs->property_image;
                        array_push($properties, $upload_path);
                    }
                }
                echo '<pre>'; print_r($properties); exit;
                return response()->json([
                    'success' => true,
                    'data' => $properties->toArray()
                ], 400);
            }
        }
        else{
            return response()->json([
                'success' => false,
                'message' => 'No data available'
            ], 500);
        }
    }
php mysql laravel laravel-5.6
1个回答
0
投票

尝试此查询,它应该适用于您只需单个查询中获取所有属性及其所有图像。图像将以逗号分隔,您将获得单个产品行。你将不得不用逗号进行爆炸。如果你正在编写任何api,你可以用图像连接完整的URL。

    DB::table('properties')
    ->selectRaw('GROUP_CONCAT(property_images.property_image) as 
    property_images, properties.*')
    ->leftJoin('property_images', 'property_images.property_id', '=', 'properties.id')
    ->groupBy('properties.id')
    ->get()->toArray();
© www.soinside.com 2019 - 2024. All rights reserved.