当前位置: 首页 > 知识库问答 >
问题:

Laravel一个模型和多个模型之间的雄辩关系,如吗啉酮?

易宣
2023-03-14

简介:

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

  • 地址表--

规则:

  • 每个用户只能有一个地址

这里可以进行两种可能的关系规划:

>

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

    我觉得这是地址表的一项间接费用。

    或者反过来说:

    • 地址hasOne用户和用户属性要地址[一对一的关系也]。这样做的好处是,它将外键保留在相关的Model中。[用户、公司和财产]这样就没有外键的空字段——但这仍然违反了现实生活中的建模逻辑,该逻辑规定用户有一个地址,而不是地址有一个用户。

    我的问题:

    是否有任何其他关系,可以绑定这4个模型在一个关系类似多态关系,但不使用MorphOne,而是使用MorphOne奇怪的是,我不能在Laravel文档中找到它,虽然该方法本身存在于雄辩的关系。

    这种吗啉酮多态性关系可能吗?它是如何组成的?

    现有代码:

    //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
    public function address(){
        return $this->belongsTo(Address::class);
    }
    
    //Company model
    public function address(){
        return $this->belongsTo(Address::class);
    }
    //Property model
    public function address(){
        return $this->belongsTo(Address::class);
    }
    
  • 共有1个答案

    顾高扬
    2023-03-14

    这里是MorphOne之间的关系地址在一边和用户,公司和财产在另一边:

    class Address extends Model
        public function addressable(){
            return $this->morphTo();
        }       
    }
    
    class User extends Model
        public function address(){
            return $this->morphOne(Address::class,'addressable'); //note this is not MorphMany()
        }       
    }
    
    class Company extends Model
        public function address(){
            return $this->morphOne(Address::class,'addressable');
        }       
    }
    
    class Property extends Model
        public function address(){
            return $this->morphOne(Address::class,'addressable');
        }       
    }
    

    然后在UserController中,类似这样的内容:

    $user = User::find(1);
    
    $addressData = [
        'street_name' => '5, Golf street',
        'country_id' => 100, //etc..
    ];
    
    //to add new address record related to user:
    $user->address()->create($addressData);
    dd($user->address);
    
    //to update existing address record related to user:
    $user->address->update($addressData);
    //dd($user->address);
    
     类似资料:
    • 因此,我在JeffreyWay的屏幕广播中了解到,我可以使用Eloquent从注入到另一个模型的模型中获取相关id。 我正在关注他关于Laravel 5.4的系列报道。 在这里,我有一个用户到帖子的一对多关系。 应用程序/帖子 在我的用户模型中,我有一个发布方法,其中注入了发布模型。发布方法用于创建进入数据库的发布条目。 应用/用户 然后,我在PostsController中有一个存储方法,它在我

    • 我正在尝试使用Laravel雄辩的模型查询多个表,这些模型具有一对一、一对多和多对多的关系。 我有一个表,一个表,一个表和一个透视表。 每个表单有一个品牌和一个用户: 品牌没有任何外键: 用户没有任何外键: 有一个数据透视表可以创建多对多的关系,用于创建拥有许多用户(如品牌成员)的品牌组: 我试图通过直接所有权()或品牌成员身份获取属于用户的所有表单,通过多对多透视表获取用户所属的所有品牌的所有表

    • 我将有一个充满涉及其他表(关系)的信息的表。此表中的大多数信息将只有引用相关表的ID。如果我使用“产品”作为此表的示例,对于某些列来说可能是这样的: 我想把这个“产品”表倒出到一个列表中。当我将其转储(关系)时,我需要查找这些列中的所有项。我知道如何做物品和物品,但是我不确定如果我有一个“产品”模型,我怎么能用雄辩的模型一次性做到这一点?我应该让产品表只是一个数据透视表吗?我可以用雄辩的模型做它,

    • 我有一个无法解决的问题。我有一个包含TitleID、TextID、ImageID的新闻表。还有三张表格,标题,文本,图片。我想把它们都放在一个模型里。但当我尝试时,得到的结果就像数组中的数组。但我想要的是: 雄辩的ORM对此的反应如下: 数据库结构 新闻= 头衔= 其他表类似于标题表。

    • 我有两种型号: 产品,它有字段 库存,具有产品标识和数量字段 我想按排序字段(ASC)获取订购的产品,但库存量等于0的产品需要位于列表的末尾。 例如。 产品介绍 股票 预期列表(产品ID)-4、1、2、3 我已经为我需要做的事情编写了SQL查询。 有没有一种方法可以使用雄辩模型的作用域来获得此类列表? 使现代化 解决方案。

    • 我使用的是Laravel 5.4,其模型和表格结构如下: 一个用户可以有多个账户 一个帐号可以被多个用户共享 每个账户有多个持有量 因此,用户通过他们的许多帐户间接拥有许多资产。 我需要帮助在用户模型上定义一个称为“持有量”的关系,以获得适用于用户的所有持有量(基于他们所链接的账户)。 我尝试了很多不同的东西,在谷歌上花了很长时间。我可以接近BelongToMany和hasManyThrough,