带有其他表结果的Laravel透视表

带有其他表结果的Laravel透视表,laravel,Laravel,我对结果的关系透视表感到困惑。 例如: 我有3个表+1个表用于插入数据 structurals id name indicators id name structural_indicator (Pivot Table) id structural_id indicator_id quality_indicators (Insert Table) id structural_indicator_id numera

我对结果的关系透视表感到困惑。 例如: 我有3个表+1个表用于插入数据

structurals
    id
    name

indicators
    id
    name

structural_indicator (Pivot Table)
    id
    structural_id
    indicator_id

quality_indicators (Insert Table)
    id
    structural_indicator_id
    numerator_score
    denominator_score
    date_at
这是我的人际关系:

    //Indicator Model
    public function structurals() {
        return $this->belongsToMany(Structural::class, 'structural_indicator');
    }

    //Structural Model
    public function Indicators() {
        return $this->belongsToMany(Indicator::class, 'structural_indicator')
                ->withPivot(['id']);
    }
对于与pivot表的关系,这没有问题


但是我想要一个带有插入表(质量指标)的关系透视表,按
结构指标id
日期搜索,并显示带有质量指标的结果透视表。

您需要创建
结构指标PIVOTMODEL
,如下所示

<?php

namespace yournamespace;

use Illuminate\Database\Eloquent\Model;

class StructuralIndicatorPivotModel extends Model
{
    /**
     *
     */
    protected $table = 'structural_indicator';

    /**
     *
     */
    protected $with = ['qualityIndicator'];

    /**
     *
     */
    public function qualityIndicator()
    {
        return $this->hasOne(QualityIndicator::class, 'structural_indicator_id', 'id');
    }
}
结构模型


我正在尝试使用此依赖项

但错误是:

调用模型[App\Models\Indicator]上未定义的关系[pivot]

这是我的模型和轴心

class Structural extends Model
{

    public function indicators()
    {
        return $this->belongsToMany(Indicator::class, 'structural_indicator')
                    ->withPivot(['id'])
                    ->using(StructuralIndicator::class);
    }

    public function qualityIndicator(){
        return $this->hasManyDeep(Indicator::class,
            [StructuralIndicator::class, QualityIndicator::class],
            ['structural_id', 'structural_indicator_id'],
            ['id', 'id']
        );
    }
}

class Indicator extends Model
{
    public function structurals()
    {
        return $this->belongsToMany(Structural::class, 'structural_indicator')->using(StructuralIndicator::class);
    }
}

class StructuralIndicator extends Pivot
{
    public function structural(){
        return $this->belongsTo(Structural::class);
    }
    
    public function indicator(){
        return $this->belongsTo(Indicator::class);
    }

    public function qualityIndicator()
    {
        return $this->hasMany(QualityIndicator::class, 'structural_indicator_id');
    }
}

class QualityIndicator extends Model
{
    public function structuralIndicator()
    {
        return $this->belongsToMany(StructuralIndicator::class, 'structural_indicator_id');
    }
}
这是我在控制器中的代码:

$structural = Structural::with('indicators')->with('indicators.pivot.qualityIndicator')->where('id', 6)->first();

如果我使用StructuralIndicatorPivotModel::find($id);,这是可行的;。但是我想使用Structural::find($id)?。我使用Structural::find($id)->indicator,我成功地显示了数据透视表中的数据,但我希望每个指标都有qualityIndicator结果。上面的模型不能对其调用
find()
。但是使用
$with
,每次调用pivot时都会自动加载
qualityIndicator
。谢谢,先生,这真是太了不起了。但我有一个问题,当我从质量指标表中得到日期条件时<代码>->whereHas('structuralIndicatorPivot.qualityIndicator',function($query){$query->where('date_at','2021-05-19');})
。如果与日期不一致,则结果为空。我希望结果始终显示且结构指示器PIVOT.qualityIndicator结果为空先生,感谢您的所有回答。问题已经结束。这是我的语法
$structural=structural::where('id',$id)->with(['indicators','structuralIndicatorPivot'=>函数($query){$query->with('qualityIndicator',函数($q){$q->where('date_at','2021-05-19');});}])->first()我已经更新了答案。它现在运行得非常好。试试看。
class Structural extends Model
{

    public function indicators()
    {
        return $this->belongsToMany(Indicator::class, 'structural_indicator')
                    ->withPivot(['id'])
                    ->using(StructuralIndicator::class);
    }

    public function qualityIndicator(){
        return $this->hasManyDeep(Indicator::class,
            [StructuralIndicator::class, QualityIndicator::class],
            ['structural_id', 'structural_indicator_id'],
            ['id', 'id']
        );
    }
}

class Indicator extends Model
{
    public function structurals()
    {
        return $this->belongsToMany(Structural::class, 'structural_indicator')->using(StructuralIndicator::class);
    }
}

class StructuralIndicator extends Pivot
{
    public function structural(){
        return $this->belongsTo(Structural::class);
    }
    
    public function indicator(){
        return $this->belongsTo(Indicator::class);
    }

    public function qualityIndicator()
    {
        return $this->hasMany(QualityIndicator::class, 'structural_indicator_id');
    }
}

class QualityIndicator extends Model
{
    public function structuralIndicator()
    {
        return $this->belongsToMany(StructuralIndicator::class, 'structural_indicator_id');
    }
}
$structural = Structural::with('indicators')->with('indicators.pivot.qualityIndicator')->where('id', 6)->first();