【发布时间】: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();
}
【问题讨论】:
-
您是否尝试过使用“左”连接? laravel.com/docs/5.6/queries#joins