我有這個查詢:
$result = PortingItem::whereHas('porting', function ($query) {
$query->whereIn('status', [
Porting::STATUS_REQUESTED,
Porting::STATUS_ACCEPTED,
Porting::STATUS_DELAYED,
]);
})->where(function ($query) use ($numbers) {
$query->whereBetween('phone_number_start', [$numbers[0], $numbers[1]])
->orWhereBetween('phone_number_end', [$numbers[0], $numbers[1]]);
})->orWhere([
['phone_number_start', '<=', $numbers[0]],
['phone_number_end', '>=', $numbers[1]],
])->get();
在PortingItem同時移植關系是空的模型仍回傳查詢結果。我不明白為什么會發生這種情況。
這是我的Porting模型關系
public function items()
{
return $this->hasMany(PortingItem::class);
}
這是我的PortingItem模型關系:
public function porting()
{
return $this->belongsTo(Porting::class);
}
uj5u.com熱心網友回復:
您應該始終對
orWhere呼叫進行分組,以避免在應用全域作用域時出現意外行為。
$result = PortingItem::whereHas('porting', function ($query) {
$query->whereIn('status', [
Porting::STATUS_REQUESTED,
Porting::STATUS_ACCEPTED,
Porting::STATUS_DELAYED,
]);
})->where(function ($query) use ($numbers) {
$query->where(function ($query) use ($numbers) {
$query->whereBetween('phone_number_start', [$numbers[0], $numbers[1]])
->orWhereBetween('phone_number_end', [$numbers[0], $numbers[1]]);
})->orWhere(function ($query) use ($numbers) {
$query->where('phone_number_start', '<=', $numbers[0])
->where('phone_number_end', '>=', $numbers[1]);
});
})->get();
https://laravel.com/docs/8.x/queries#logical-grouping
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/326505.html
標籤:拉拉维尔
