【发布时间】:2020-10-21 08:26:05
【问题描述】:
我有一个具有以下模型和关系的应用:
Contact 变形许多 Values:
public function customFieldValues()
{
return $this->morphMany(Value::class, 'model');
}
Value 属于CustomField:
public function customField(): BelongsTo
{
return $this->belongsTo(CustomField::class);
}
CustomField 属于Validation:
public function validation(): BelongsTo
{
return $this->belongsTo(Validation::class);
}
我想为值验证添加一个简写,所以我在Value 类中添加了以下内容:
public function validation(): BelongsTo
{
return $this->customField->validation();
}
我遇到的问题是,当我尝试在 Contact 模型上通过验证急切加载值时。
执行Contact::with('customFieldValues.validation')->first() 失败:
在
null上调用成员函数validation()
(这里的null指的是Value类validation()方法中的$this->customField)
当使用不带速记的“完整”关系时,它会正确返回。所以Contact::with('customFieldValues.customField.validation')->first() 有效。
从Value 的角度来看,它也可以正常工作:Value::first()->validation。
我以前用过这种关系,是不是和多态关系有关?我可以完成这项工作还是不可能?
【问题讨论】:
标签: php laravel eloquent polymorphism