【问题标题】:How to combine two queries in laravel?如何在laravel中组合两个查询?
【发布时间】:2018-05-02 00:15:14
【问题描述】:

查询1:

 $image= DB::table('products_photos')->groupBy('filename')
->get(['filename', DB::raw('MAX(id) as id')]);

这是我为所有存储的记录检索单个图像的查询。

查询2:

$verifiedValues= priceInfo::join('productDescription', 
'productDescription.productId', '=', 'productPriceDetails.productId')
   ->join('productAdditionalInformation', 
 'productAdditionalInformation.productId', '=', 
'productPriceDetails.productId')
   ->join('products_photos', 'products_photos.productId', '=', 
'productAdditionalInformation.productId')
 ->select('productPriceDetails.SKUID','productDescription.modelName')
   **->select($image)**
        ->where('productPriceDetails.nonliveStatus', '=', 
  "QCVerified")-

>where('productAdditionalInformation.nonliveStatus','=',"QCVerified")
      ->where('productDescription.nonliveStatus','=',"QCVerified")
      ->where('products_photos.nonliveStatus','=',"QCVerified")
      ->where('productPriceDetails.listingStatus','=',"Inactive") 
     ->get();

这是我的查询,我已加入多个表,需要将 query1 与 query2 结合起来。

SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters

合并两个查询时出错

【问题讨论】:

  • 这两个查询对我来说看起来非常不同,这可能排除了联合作为组合它们的一种方式。有什么方法可以使用连接吗?你能包括你的表模式吗?如果你被 Laravel 卡住了,你总是可以回到原始的 MySQL 并首先解决问题。
  • 为什么不使用 ORM?这简化了许多这样的查询。如果其他开发人员必须维护这样的查询,他们会讨厌你。 ORM 是一种更流畅的方式来归档相同的功能。

标签: php mysql laravel-5.4


【解决方案1】:

恕我直言,您有两个选择。您可以尝试使用merge() 方法合并两个结果集合,正如Laravel :: Combine two DB query objects 所解释的那样

或者您使用连接将两个查询组合到一个查询中。要保留您的 Builder 对象(不带 get()),您可以使用以下内容:

$single_query = DB::table('first_query')
    ->join(DB::raw('('.$second_query->toSQL().') alias'), 'id', 'alias.id')
    ->mergeBindings($second_query)
    ->get();

如果您没有任何参数,您可以省略mergeBindungs() 子句。

【讨论】:

    猜你喜欢
    • 2021-10-12
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 2017-11-21
    相关资源
    最近更新 更多