Модель Get GrandParent - PullRequest
       4

Модель Get GrandParent

1 голос
/ 14 мая 2019

В моем приложении есть следующие модели:

  1. Кабина
  2. Направление
  3. Пассажир

Где:

  • В кабине много мест назначения
  • В кабине много пассажиров
  • В пункте назначения много такси
  • В пункте назначения много пассажиров
  • У пассажира одна кабина
  • У пассажира есть один пункт назначения

Теперь я пытаюсь выполнить запрос, который возвращает список всех такси вместе с их пунктами назначения, а также количество пассажиров, направляющихся в каждый пункт назначения, и общее количество пассажиров.нет пассажиров в автомобиле:

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"];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...