这些雄辩的关系定义正确吗?

问题描述 投票:0回答:1

我有一个属于 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);
}
php laravel eloquent
1个回答
0
投票

根据你的关系,我猜这就是你的表结构

付款
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');
    }
}

这会比您的其他两次尝试更好,因为这可以轻松加载并且不依赖于其他现有关系。

© www.soinside.com 2019 - 2024. All rights reserved.