2017-10-12 77 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查询的一个典型问题。

相关问题