我有一个属于 FinancialGoal 模型的 Payment 模型,而 FinancialGoal 模型又属于 User 模型。我定义了这些关系方法:
支付模式:
public function financialGoal()
{
return $this->belongsTo(FinancialGoal::class);
}
public function user()
{ //not sure this is correct
return $this->hasOneThrough(User::class, FinancialGoal::class);
}
用户型号:
public function financialGoals()
{
return $this->hasMany(FinancialGoal::class);
}
public function payments()
{
return $this->hasManyThrough(Payment::class, FinancialGoal::class);
}
财务目标模型:
public function user()
{
return $this->belongsTo(User::class);
}
public function payments()
{
return $this->hasMany(Payment::class);
}
问题是如何在用户模型、支付模型中定义支付方式的逆过程。我曾在支付模型上使用过这两个定义之一,并且两者都有效,但只是不确定是否可以使用其中任何一个,并且很想知道正确的方法。
public function user()
{
return $this->financialGoal->user();
}
public function user()
{ // had to ignore static analysis error for this but it returns the relationship
return $this->financialGoal->belongsTo(User::class);
}
根据你的关系,我猜这就是你的表结构
付款 |
---|
id |
财务目标_id |
财务目标 |
---|
id |
用户 ID |
用户 |
---|
id |
您在
user
模型 ( Payment
) 上的第一个 $this->hasOneThrough(User::class, FinancialGoal::class)
关系是不正确的,因为您需要它的逆。 Laravel 文档中没有很好地记录它,但是如果您尝试使用 hasOneThrough
方法的所有参数,您就可以实现您的目标。用户关系看起来像
class Payment extends Model
{
public function user()
{
return $this->hasOneThrough(User::class, FinancialGoal::class, 'id', 'id', 'financial_goal_id', 'user_id');
}
}
这会比您的其他两次尝试更好,因为这可以轻松加载并且不依赖于其他现有关系。