【发布时间】:2021-06-04 11:56:59
【问题描述】:
我正在尝试获取具有关系的空字段的记录。我的 Deal 模型也是这样。
<?php
namespace App\Models;
class Deal extends Model
{
use HasFactory;
use SoftDeletes;
protected $fillable = [
'id',
'creator_user_id',
'user_id',
'owner_name',
'person_id',
'person_name',
'stage_id',
'title',
'value',
'currency',
'formatted_value',
'status',
'won_time',
'note',
'source',
'gender',
'nationality',
'city',
'language',
'passport_number',
'arrival_airport',
'arrival_flight_code',
'arrival_date',
'arrival_time',
'hotel',
'hotel_nights',
'hotel_check_in_date',
'hotel_check_out_date',
'departure_airport',
'departure_flight_code',
'departure_date',
'departure_time',
'discount'
];
public function person()
{
return $this->hasOne('App\Models\Person','id','person_id');
}
/**
* Scope a query to all fields not filled.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeNotFilled($query): \Illuminate\Database\Eloquent\Builder
{
return $query
->orWhereNull('source')
->orWhereNull('gender')
->orWhereNull('nationality')
->orWhereNull('city')
->orWhereNull('language')
->orWhereNull('arrival_airport')
->orWhereNull('arrival_flight_code')
->orWhereNull('arrival_date')
->orWhereNull('arrival_time')
->orWhereNull('hotel')
->orWhereNull('hotel_nights')
->orWhereNull('hotel_check_in_date')
->orWhereNull('hotel_check_out_date')
->orWhereNull('departure_airport')
->orWhereNull('departure_flight_code')
->orWhereNull('departure_date')
->orWhereNull('departure_time')
;
}
}
当我尝试使用下面的查询获取数据时
return Deal::notFilled()->
whereHas('person',function ($query){
$query->orWhere('email',null);
})
->where('won_time','>',Carbon::parse('2021-01-01'))
->orderBy('won_time', 'desc')
->paginate(15);
我可以获得包含一些空字段但不包括没有email 的关系的交易。我想获得具有空字段的交易,并且如果关系没有email 地址必须在列表中。我该如何解决这个问题?
【问题讨论】:
标签: laravel eloquent scope relationship wherehas