Laravel过滤器模型关系

时间:2019-06-04 05:53:45

标签: mysql laravel

我有一个带有关系的模型,我只想返回与查询匹配的部分关系。

但是,每次关系恢复时,我都无法实现。

我的模特是

全部

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)

(返回正确数量的分数,但没有“类型”关系,我需要它)

如何仅返回带有fractions.type.surface_ascenseur> 0的分数?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您与最后一个非常接近。试试:

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();