В моем приложении есть следующие модели:
- Кабина
- Направление
- Пассажир
Где:
- В кабине много мест назначения
- В кабине много пассажиров
- В пункте назначения много такси
- В пункте назначения много пассажиров
- У пассажира одна кабина
- У пассажира есть один пункт назначения
Теперь я пытаюсь выполнить запрос, который возвращает список всех такси вместе с их пунктами назначения, а также количество пассажиров, направляющихся в каждый пункт назначения, и общее количество пассажиров.нет пассажиров в автомобиле:
Cab::withCount(["passengers" => function($q) {
return $query->whereNull("expired_at");
}])
->when($withDestinations, function ($query) use ($status) {
return $query->whereHas("destinations")
->with(["destinations" => function ($query) {
return $query->whereHas("passengers", function ($query) {
return $query->whereNull("expired_at");
})->withCount("passengers");
}]);
})
->paginate(25)
Теперь проблема заключается в том, что по какой-то причине он возвращает пассажиров в пункт назначения, но не фильтрует запрос по cab_id.
Это мои модели:
cab.php :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Cab extends Model
{
use SoftDeletes;
protected $dates = ["arrived_at", "departed_at", "suspended_at", "deleted_at"];
public function company() {
return $this->belongsTo("App\Models\Company", "company_id");
}
public function driver() {
return $this->belongsTo("App\Models\Driver", "driver_id");
}
public function status() {
return $this->belongsTo("App\Models\Status", "status_id");
}
public function destinations() {
return $this->belongsToMany("App\Models\Destination", 'destination_cab', 'cab_id', 'destination_id');
}
public function passengers() {
return $this->hasMany("App\Models\Passenger", "cab_id");
}
public function photo() {
return $this->belongsTo("App\Models\Resource", "photo_id");
}
}
destination.php :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Destination extends Model
{
use SoftDeletes;
protected $dates = ["suspended_at", "deleted_at"];
public function company() {
return $this->belongsTo("App\Models\Company", "company_id");
}
public function cabs() {
return $this->belongsToMany("App\Models\Cab", "destination_cab", "destination_id", "cab_id");
}
public function passengers() {
return $this->hasMany("App\Models\Passenger", "destination_id");
}
}
пассажир.php :
<?php
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
class Passenger extends Model
{
protected $dates = ["due_at", "expired_at"];
protected $casts = ["meta" => "json"];
protected $fillable = ["meta"];
}