2017-10-12 71 views
6

控制器功能:如何從laravel中的插入圖像數組中獲取單個圖像?

<?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(); 
?> 

在這裏,我選擇鏡像文件從table.It取入的多個圖像存儲的基於單id.But我只需要一個來自圖像陣列的圖像存儲。

+1

在您的查詢中使用限制來獲取單個圖像 – pravindot17

+0

您能否詳細說明清楚 –

+0

我建議使用' - > groupBy('productPetails.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

'SQLSTATE [42000]:語法錯誤或訪問衝突:1055 SELECT列表的表達式#1不在GROUP BY子句中,並且包含非功能依賴的非聚集列'GemSeller.products_photos.filename' GROUP BY子句中的列;這是不符合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(); 
?> 

在此代碼中使用first()而不是get()。

+0

這裏也限制了我提取的記錄 –

+0

任何人?? ............... –

2

您當前的數據庫查詢只是列出了所有可能的文件名,因爲沒有添加任何ID限制。

由於OP聲明您要查找基於單個ID的文件名,並且您對其他答案的評論表明您不想限制提取的記錄,所以可以擴展查詢以包含ID和然後在結果集合中執行搜索:

// 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 ... 

對不起使用SQL符號,但我不知道query-bulder lawrell。這只是構建SQL查詢的一個典型問題。