带有其他表结果的Laravel透视表
我对结果的关系透视表感到困惑。 例如: 我有3个表+1个表用于插入数据带有其他表结果的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
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();