2017-10-12 47 views
6

điều khiển chức năng:Cách lấy hình ảnh đơn lẻ từ một mảng Hình ảnh được chèn vào trong 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); 
} 
?> 

Đây là chức năng lưu trữ của tôi để lưu trữ mảng của hình ảnh.

Function Để lấy hình ảnh duy nhất từ ​​một loạt các hình ảnh:

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

Ở đây tôi chọn imagefile từ table.It fetches nhiều hình ảnh được lưu trữ dựa trên id.But duy nhất tôi chỉ cần một hình ảnh từ mảng hình ảnh được lưu trữ.

+1

giới hạn sử dụng trong truy vấn để có được hình ảnh đơn – pravindot17

+0

bạn vui lòng chỉ định rõ ràng –

+0

Tôi đề nghị sử dụng '-> groupBy ('productPriceDetails.productId')' làm giải pháp. nhưng vấn đề chính là trong thiết kế cơ sở dữ liệu của bạn –

Trả lời

1

Sử dụng mã bên dưới các hồ sơ hạn chế

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

kiểm tra các cập nhật mã dưới đây: Ở đây bạn sẽ nhóm các hình ảnh bằng cách sản phẩm và sẽ có được hình ảnh sản phẩm duy nhất

<?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

Xin lỗi, tôi không muốn giới hạn bản ghi. Tôi chỉ muốn giới hạn hình ảnh tôi đang tìm nạp –

+0

bất kỳ ai ?? hãy giúp tôi giải quyết vấn đề này –

+0

'SQLSTATE [42000]: Lỗi cú pháp hoặc vi phạm truy cập: 1055 Biểu thứC# 1 của danh sách SELECT không có trong mệnh đề GROUP BY và chứa cột không được phân tách 'GemSeller.products_photos.filename' không phụ thuộc vào chức năng các cột trong mệnh đề GROUP BY; điều này là không tương thích với 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(); 
?> 

Trong mã này sử dụng đầu tiên() thay vì get().

+0

Ở đây cũng vậy, nó giới hạn các bản ghi tôi đang tìm nạp –

+0

bất kỳ ai ?? ............... –

2

Truy vấn cơ sở dữ liệu hiện tại của bạn chỉ liệt kê tất cả các tên tệp có thể do không có giới hạn ID nào được thêm vào.

Vì OP tuyên bố rằng bạn muốn tìm kiếm tên tệp dựa trên một ID duy nhất và nhận xét của bạn về các câu trả lời khác cho biết bạn không muốn giới hạn các bản ghi đã tải xuống, bạn có thể mở rộng truy vấn của mình sau đó thực hiện tìm kiếm trong Bộ sưu tập kết quả:

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

Tất nhiên đây chỉ là ví dụ về cách giải quyết vấn đề này. Bạn chắc chắn sẽ cần phải điều chỉnh điều này để phù hợp với phần còn lại của mã của bạn.

1

Nếu bạn hiểu rõ, bạn có rất nhiều ảnh sản phẩm. Nếu bạn có một bức ảnh trong cơ sở dữ liệu đó là một bức ảnh chính, sau đó bạn có thể xây dựng một truy vấn như:

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

Nếu không sử dụng sub-query

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

Xin lỗi cho việc sử dụng ký hiệu SQL, nhưng tôi không biết luật pháp của trình truy vấn-bulder. Và đây chỉ là một vấn đề điển hình khi xây dựng các truy vấn SQL.

Các vấn đề liên quan