2017-10-12 31 views
6

नियंत्रक समारोह:लार्वेल में सम्मिलित छवियों की सरणी से एकल छवि कैसे प्राप्त करें?

<?php 

public function addImages(Request $request, $imagesProductId) { 

    $product = Product::create($request->all()); 
    $filenames = array(); 

    if (empty($request->images)) { 
     $message = "error"; 
     return Redirect::back()->with('message', $message); 
    } 


    $rules = [ 
     'images' => 'mimes:jpeg,jpg,png'     // allowed MIMEs 
// size in pixels 
    ]; 



    $validator = Validator::make($request->all(), $rules); 
    $result = $validator->fails() ? 'QCVerified' : 'QCFailed'; 



    foreach ($request->images as $photo) { 

// echo($result); 
     $filename = $photo->store('public/uploadedImages'); 
     $filename = substr($filename, 22); 
     $filenames[] = asset('storage/uploadedImages/' . $filename); 
     ProductsPhoto::create([ 
      'nonliveStatus' => $result, 
      'product_id' => $product->id, 
      'productId' => $imagesProductId, 
      'filename' => $filename 
     ]); 
    } 
    return response()->json($filenames); 
} 
?> 

यह छवियों की सरणी के भंडारण के लिए मेरी भंडारण कार्य है।

समारोह छवियों की एक सरणी से ही छवि लाने के लिए:

<?php 
$liveValues = priceInfo::join('productDescription', 'productDescription.productId', '=', 'productPriceDetails.productId') 
     ->join('productAdditionalInformation', 'productAdditionalInformation.productId', '=', 'productPriceDetails.productId') 
     ->join('products_photos', 'products_photos.productId', '=', 'productAdditionalInformation.productId') 
     ->select('products_phots.filename') 
     ->where('productPriceDetails.nonliveStatus', '=', "QCVerified") 
     ->get(); 
?> 

यहाँ मैं imagefile का चयन कर रहा हूँ table.It से कई छवियों को हासिल करेगा एकल id.But के आधार पर संग्रहीत मैं केवल एक की जरूरत है संग्रहीत छवियों की सरणी से छवियों।

+1

एकल छवि – pravindot17

+0

प्राप्त करने के लिए अपनी क्वेरी में उपयोग सीमा का उपयोग करें, कृपया आप इसे स्पष्ट रूप से निर्दिष्ट करें –

+0

मैं समाधान के रूप में '-> groupBy ('productPriceDetails.productId') 'का उपयोग करने का सुझाव देता हूं। लेकिन मुख्य समस्या आपके डेटाबेस डिज़ाइन में है –

उत्तर

1

उपयोग नीचे कोड सीमित रिकॉर्ड

<?php 
$liveValues = priceInfo::join('productDescription', 'productDescription.productId', '=', 'productPriceDetails.productId') 
     ->join('productAdditionalInformation', 'productAdditionalInformation.productId', '=', 'productPriceDetails.productId') 
     ->join('products_photos', 'products_photos.productId', '=', 'productAdditionalInformation.productId') 
     ->select('products_phots.filename') 
     ->where('productPriceDetails.nonliveStatus', '=', "QCVerified") 
     ->limit(1) 
     ->get(); 
    ?> 

जांच नीचे अद्यतन कोड: यहाँ आप करेंगे समूह उत्पादों द्वारा छवियों और एकल उत्पाद छवि मिल जाएगा

<?php 
$liveValues = priceInfo::join('productDescription', 'productDescription.productId', '=', 'productPriceDetails.productId') 
    ->join('productAdditionalInformation', 'productAdditionalInformation.productId', '=', 'productPriceDetails.productId') 
    ->join('products_photos', 'products_photos.productId', '=', 'productAdditionalInformation.productId') 
    ->select('products_phots.filename') 
    ->where('productPriceDetails.nonliveStatus', '=', "QCVerified") 
    ->limit(1) 
    ->groupBy('products_photos.productId') 
    ->get(); 
?> 
+0

क्षमा करें, मैं रिकॉर्ड्स को सीमित नहीं करना चाहता हूं। मैं सिर्फ उन छवियों को सीमित करना चाहता हूं जिन्हें मैं –

+0

किसी को ला रहा हूं ?? कृपया –

+0

'एसक्यूएलएसटीएटी [42000] को हल करने में मेरी मदद करें: सिंटेक्स त्रुटि या उल्लंघन का उल्लंघन: 1055 अभिव्यक्ति सूची 1 का चयन समूह समूह में नहीं है और इसमें गैर-समेकित कॉलम' GemSeller.products_photos.filename 'शामिल है जो कार्यात्मक रूप से निर्भर नहीं है समूह द्वारा समूह में कॉलम; यह sql_mode = only_full_group_by' –

1
<?php 
$liveValues = priceInfo::join('productDescription', 'productDescription.productId', '=', 'productPriceDetails.productId') 
     ->join('productAdditionalInformation', 'productAdditionalInformation.productId', '=', 'productPriceDetails.productId') 
     ->join('products_photos', 'products_photos.productId', '=', 'productAdditionalInformation.productId') 
     ->select('products_phots.filename') 
     ->where('productPriceDetails.nonliveStatus', '=', "QCVerified") 
     ->get(); 
?> 

इस कोड में() के बजाय पहले() का उपयोग करें।

+0

यहां भी, यह उन रिकॉर्ड को सीमित करता है जिन्हें मैं –

+0

किसी को ला रहा हूं? ............... –

2

आपकी वर्तमान डेटाबेस क्वेरी में सभी संभावित फ़ाइल नाम सूचीबद्ध हैं क्योंकि कोई आईडी प्रतिबंध जोड़ा नहीं गया है।

चूंकि ओपी कहता है कि आप एक आईडी के आधार पर फ़ाइल नाम देखना चाहते हैं और अन्य उत्तरों पर आपकी टिप्पणियां इंगित करती हैं कि आप प्राप्त रिकॉर्ड को सीमित नहीं करना चाहते हैं, तो आप आईडी को शामिल करने के लिए अपनी क्वेरी बढ़ा सकते हैं और फिर परिणामी संग्रह में एक खोज करें:

// I've included the "productId" column here, but feel free to include any other column as required. 
$liveValues = priceInfo::join('productDescription',  'productDescription.productId', '=', 'productPriceDetails.productId') 
         ->join('productAdditionalInformation',  'productAdditionalInformation.productId', '=', 'productPriceDetails.productId') 
         ->join('products_photos', 'products_photos.productId', '=',  'productAdditionalInformation.productId') 
         ->select('products_photos.productId', 'products_photos.filename') 
         ->where('productPriceDetails.nonliveStatus', '=', "QCVerified") 
         ->get(); 

// Get the image filename for a given productId. 
// ID calculation logic here. 
$productId = 512; // Sample ID 

// $liveValues is a Collection. 
$filename = $liveValues->where('productId', $productId) 
         ->pluck('filename') 
         ->first(); // Get first filename if there are multiple. 

बेशक यह इस बात से निपटने का एक उदाहरण है। आपको अपने शेष कोड में फिट करने के लिए निश्चित रूप से इसे समायोजित करने की आवश्यकता होगी।

1

यदि आप अच्छी तरह से समझते हैं, तो आपके पास बहुत सारी उत्पाद फ़ोटो हैं। आप डेटाबेस एक मुख्य तस्वीर है कि में एक तस्वीर है, तो आप की तरह एक प्रश्न का निर्माण कर सकते हैं:

SELECT ... FROM ... 
    [LEFT] JOIN products_photos 
     ON products_photos.productId = productAdditionalInformation.productId 
      AND products_photos.is_main = 1 

अन्यथा एसक्यूएल अंकन का उपयोग के लिए उप क्वेरी

SELECT ... , (SELECT filename FROM products_photos WHERE productId = productAdditionalInformation.productId [ORDER BY productId DESC]) 
    FROM ... 

क्षमा उपयोग करते हैं, लेकिन मुझे लगता है क्वेरी-बॉलर लॉरेल को नहीं जानते। और एसक्यूएल प्रश्नों के निर्माण के साथ यह एक सामान्य समस्या है।

संबंधित मुद्दे