首页 > 解决方案 > Laravel 传递关系失败

问题描述

我有一个具有以下模型和关系的应用程序:

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()失败:

调用成员validation()函数null

null这里指的是$this->customFieldValue方法validation()

当使用没有速记的“完整”关系时,它会正确返回。所以Contact::with('customFieldValues.customField.validation')->first()有效。

同样,从 的角度来看Value,它也可以正常工作:Value::first()->validation.

我以前用过这种关系,是不是和多态关系有关系?我可以完成这项工作还是不可能?

标签: phplaraveleloquentpolymorphism

解决方案


它应该适用于此:

public function validation(): BelongsTo
{
    return $this->getAttribute('customField')->validation();
}

推荐阅读