Измените Laravel Query, чтобы получить свойства и изображения в одном запросе вместо отдельного подзапроса для изображений - PullRequest
0 голосов
/ 12 февраля 2019

Сначала я получаю свойства из таблицы 'properties', затем запускаю внутренний запрос, чтобы получить изображения из отдельной таблицы '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);
        }
    }

1 Ответ

0 голосов
/ 12 февраля 2019

Попробуйте этот запрос, он должен работать для вас, чтобы получить все свойства вместе со всеми изображениями в одном запросе.Изображения будут разделены запятыми, и вы получите его с одной строкой продукта.Вам придется взорвать через запятую. Если вы пишете 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...