【问题标题】:Laravel - return different query if query is nullLaravel - 如果查询为空,则返回不同的查询
【发布时间】:2018-09-06 08:02:11
【问题描述】:

我编写的查询可能在某些时候包含为空的列,这会导致查询返回一个空数组,即使活动表中有一个值。这是因为如果列值为空,则查询无法生成join。我正在尝试编写一个if 语句来返回campaign,即使它的值为空但它仍然返回一个空数组。如果我在 if 语句中运行查询,它会返回我正在寻找的内容,我只是无法触发 if 语句。

  public function getCampaigns(Request $request)
  {
    $authUser = auth()->user();
    $business = $authUser['business_id'];
    $query = campaigns::join('offers', 'campaigns.offer_id', '=', 'offers.id')
            ->join('conditionals', 'campaigns.conditional_id', '=', 'conditionals.id')
            ->join('triggers', 'campaigns.offer_id', '=', 'triggers.id')
            ->select('campaigns.*',
            'triggers.name AS trigger_name',
            'offers.name AS offer_name',
            'offers.reward_amount as offer_reward_amount',
            'offers.plaid_category_id as offer_plaid_id',
            'conditionals.dollars_min',
            'conditionals.dollars_max',
            'conditionals.dollars_more',
            'conditionals.xDays as days_since_last_purchase',
            'conditionals.xDate as date_since_last_purchase',
            'conditionals.xPercent as percentage_more',
            'conditionals.xPurchases as purchases_x_times',
            'conditionals.start_date',
            'conditionals.end_date',
            'conditionals.plaid_category_id')
            // ->whereNull('campaigns.trigger_id', 'campaigns.offer_id', 'campaigns.conditional_id')
            ->where('campaigns.business_id', '=', $business);
    if ($query->count() === 0){
      $query = campaigns::select('*')->where('business_id', '=', $business);
    }
    return $query->get();
  }

【问题讨论】:

标签: php mysql laravel


【解决方案1】:

查询构建器get()方法如果没有找到结果不会返回null,它会返回一个空集合。

改为检查空集合:

if ($query->count() === 0){

我也建议重命名 $query 以提高可读性,因为它没有分配查询,而是分配了结果。

【讨论】:

  • 感谢您的快速响应。那行得通。我唯一的问题是,如果有一个没有空值的活动和一个有空值的活动,它只会显示具有空值的活动。我在 if 语句周围写了一个 foreach 循环,但也没有用。
  • 哪些值为空?我确信可以用您的查询而不是 php 来解决。
  • 连接的列为空。它将需要 php。我可以弄清楚。感谢您对查询的帮助。
  • 我认为你应该看看左连接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 2012-10-10
  • 1970-01-01
  • 2012-12-19
  • 2011-11-08
  • 1970-01-01
  • 2013-11-26
相关资源
最近更新 更多