Отношение модели фильтра Laravel - PullRequest
1 голос
/ 04 июня 2019

У меня есть модель с отношениями, и я хочу вернуть только часть этих отношений, которые соответствуют запросу.

Но я не достигаю этого, каждый раз, когда возвращаются все отношения.

Мои модели

лот

public function etageLots()
{
    return $this->hasMany('App\Models\Copro\EtageLot');
 }

EtageLot

public function lot()
{
    return $this->belongsTo('App\Models\Copro\Lot');
}
public function fractions()
{
    return $this->hasMany('App\Models\Copro\Fraction','etage_lot_id');
 }

Доля

public function etageLot()
{
    return $this->belongsTo('App\Models\Copro\EtageLot','etage_lot_id');
 }
public function type()
{
    return $this->belongsTo('App\Models\Copro\Type');
 }

А, Тип

public function fractions()
{
   return $this->hasMany('App\Models\Copro\Fraction');
}

А вот запрос, который я пробовал:

$lots2 = Lot::whereHas('etageLots.fractions.type', function ($query)  { 
        $query->where('types.surface_ascenseur','>',0); 
    })
    ->with("etages.coeff")
    ->where('lots.id', '=', 1)
    ->first();
dd($lots2->etageLots->first()->fractions);

(возвращать все дроби, даже если types.surface_ascenseur> 0)

$lots2 = Lot::with(['etageLots.fractions.type' => function ($query)  { 
        $query->where('types.surface_ascenseur','>',0); 
    }])
    ->with("etages.coeff")
    ->where('lots.id', '=', 1)
    ->first();
dd($lots2->etageLots->first()->fractions)

(возвращать все дроби, даже если types.surface_ascenseur> 0)

$lots2 = Lot::with('etageLots.fractions.type',"etages.coeff")
    ->whereHas('etageLots.fractions.type', function ($q) {
        $q->where('surface_ascenseur','>',0);
      })
    ->where('lots.id', '=', 1)
    ->first();
dd($lots2->etageLots->first()->fractions);

(возвращать все дроби, даже если types.surface_ascenseur> 0)

$lots2 = Lot::with(['etageLots.fractions' => function ($query)  { 
        $query->whereHas('type', function ($q) {
            $q->where('surface_ascenseur','>',0);
          });
        }
        ])
    ->with("etages.coeff")
    ->where('lots.id', '=', 1)
    ->first();
dd($lots2->etageLots->first()->fractions)

(вернуть правильное количество дробей, но без отношения 'type', и мне это нужно)

Как вернуть дроби только с fractions.type.surface_ascenseur> 0?

Спасибо за вашу помощь

1 Ответ

1 голос
/ 04 июня 2019

Вы очень близки с последним. Попробуйте:

Lot::with([
        'etageLots.fractions' => function ($query)  { 
            $query->whereHas('type', function ($q) {
                $q->where('surface_ascenseur','>',0);
            })
            ->with('type'); // <- add this!
        }
    ])
    ->with("etages.coeff")
    ->where('lots.id', '=', 1)
    ->first();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...