如何从laravel中插入的图像数组中获取单个图像?

时间:2017-10-12 07:19:36

标签: php arrays image laravel-5.4

控制器功能:

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

这里我从表中选择图像文件。它取出了基于单个id存储的多个图像。但是我只需要存储图像数组中的一个图像。

4 个答案:

答案 0 :(得分:3)

您当前的数据库查询只列出了所有可能的文件名,因为没有添加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 :(得分: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();
?>

答案 2 :(得分: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()。

答案 3 :(得分: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表示法,但我不知道查询 - bulder lawrell。这只是构建SQL查询的典型问题。