小编Wil*_*Koz的帖子

Laravel雄辩的一个模型和许多模型之间的关系如MorphOne?

介绍:

我有这些表与他们的模型:

  • 地址表 - >地址模型
  • 用户表 - >用户模型
  • 公司表 - >公司型号
  • 属性表 - >属性模型

规则:

  • 每个用户只能拥有一个地址.
  • 每个公司只能有一个地址.
  • 每个属性只能有一个地址.

可以在此处完成两种可能的关系规划:

  • 用户有一个地址和地址属于用户[即一对一的关系],但缺点是这里的外键位于地址表即user_id字段,并通过与其他模型[公司和财产]重复相同的关系,我们将获得地址表中的另外两个外键是[ company_idproperty_id ],那么我们最终会得到 3个模型的3个外键但每个行记录只会填充一个,只留下两个外键字段留空

    我觉得这是地址表的间接费用.

或者相反:

  • 地址hasOne用户和用户所属地址[一对一关系也].这样做的好处是它可以将外键保存在相关模型中,即[用户,公司和属性],这样就没有外键的空字段---但这仍然违背了现实生活中的建模逻辑,它决定了用户 hasOne地址超过地址 hasOne用户.

我的问题:

是否有任何其他关系可以将这4个模型绑定在一个类似于多态关系的关系中,但是没有使用MorphMany但是使用MorphOne这很奇怪,我在Laravel的文档中找不到它,尽管该方法本身存在于Eloquent Relations中.

这种MorphOne多态关系是否可能以及它是如何组成的?

现有代码:

//Address model
public function user(){
    return $this->hasOne(User::class);
}
public function company(){
    return $this->hasOne(Company::class);
}
public function property(){
    return $this->hasOne(Property::class);
}

//User model …
Run Code Online (Sandbox Code Playgroud)

php relationship polymorphic-associations laravel eloquent

5
推荐指数
1
解决办法
649
查看次数

在 Laravel Eloquent 中访问数据透视表“第三模型关系”

我有这种多对多关系 Laravel Eloquent 关系模型是:

class Email extends Model //actually represent the email account
{
    protected $table = 'emails';

    protected $fillable = [
        'user_id',
        'name',
    ];

    public function messages() {
       return $this->belongsToMany(Message::class)->withPivot('email_subtype_id');
    }
}

class Message extends Model //actually represent the email message
{
    protected $table = 'messages';

    protected $fillable = [
        'subject',
        'body ',
    ];

    public function emails() {
        return $this->belongsToMany(Email::class)->withPivot('email_subtype_id');
    }
}

class EmailMessage extends Pivot //actually represent the pivot table
{
    protected $table = 'email_message';

    protected $fillable = …
Run Code Online (Sandbox Code Playgroud)

php pivot laravel eloquent

4
推荐指数
1
解决办法
1813
查看次数