Laravel教程~Laravel Eloquent关系

123 阅读2分钟

[

Teman Ngoding

](medium.com/@temanngodi…)

特曼-恩戈丁

关注

6月11日

-

4分钟阅读

Laravel教程~Laravel Eloquent关系

大家好,各位朋友好,我希望你们永远健康和成功。

这一次我们将讨论Eloquent表间关系。这个功能将使你更容易使关系变得更加简洁和简单。如果我们使用这个SQL命令,它将使表之间的关系更长。让我们来讨论Eloquent上的关系。

在我继续之前, 可能会有一些朋友感兴趣的教程.

在Laravel中使用范围

在Laravel中使用软删除的完整教程

如何在Laravel中使用播种机

Laravel数据库关系

  1. 一对一的关系, 一个表中的数据只与另一个表中的数据有关系.例如, 数据表tb_User在tb_Contact表中有1个电话号码的关系.
  2. 一对多的关系,一个表中的一个数据与另一个表中的一些数据有关系。例如,一个数据表tb_Category与tb_Inventory中的许多数据项有关系。或者换句话说,1个类别有很多库存数据。
  3. 多对一的关系(One to Many Inverse),这与一对多的关系相反。例如,我们想知道tb_Inventory中的项目数据属于哪个类别,那么将使用这种关系。
  4. 多对多的关系,即一个表中的很多数据与其他表中的很多数据也有关系。这种关系是通过一个辅助表形成的。例如,tb_Student表中的许多记录与tb_Buku表中的许多数据有借贷关系。这种关系是通过一个名为tb_Transaksi的辅助表形成的。

一对一的易拉宝关系

这是最基本的关系。比如说。每个用户有1个电话。传递给hasOne方法的第一个参数是相关的模型名称。

public function profile():{    return $this->hasOne(Profile::class);}

现在hasOne函数期望在Profile模型中有一个用户id字段。如果你的列名是不同的,在hasOne关系中添加第二个参数,并加上其他的列名。

return $this->hasOne(Profile::class, 'foreign_key');
  • 外键
    Eloquent根据模型名称来确定外键。在这种情况下,Profile模型被假定有一个外键 默认的author_id。
    指定一个外键,其中默认的用户和作者关系是user_id。要手动设置外键,可以写成第二个参数。
return $this->hasOne(Profile::class, 'foreign_key','local_key');
  • 逆向关系外键。
    在前面的例子中,Eloquent试图将Phone模型的user_id与User模型的id匹配。默认的外键名称是关系的方法名称加上_id后缀,所以在这个例子中是user_id。
    如果它不匹配,可以写在 belongsTo 的第二个参数中。
public function profile():{    return $this->belongsTo(Profile::class);}
  • 逆向关系 主键
    Apabila diiginkan relasi tidak menggunakan default primary key, dapat dituliskan di parameter ketiga belongsTo:
return $this->belongsTo(Profile::class, 'foreign_key','local_key');

口齿伶俐的一对多关系

另一个非常重要的,甚至可能是最重要的,就是一对多关系。也被称为hasMany-relationship,这种关系定义了 "一个项目有许多其他项目 "的关系。这种关系与上面的关系非常相似。

继续我们的博客例子,比如说,一个简介有多个帖子。转到你的简介模型,添加以下方法。

public function posts(): HasMany{    return $this->hasMany(Post::class);    //Or: return $this->hasMany(Post::class, 'foreign_key');}
  • 外键 dan 本地键
    一对多中使用外键和主(本地)键也与一对一类似。
return $this->hasMany(Post::class, 'foreign_key');return $this->hasMany(Post::class, 'foreign_key','local_key');

多对多

这种关系也被广泛使用。它的使用比前两类关系稍微复杂一些。
下面的例子是有用户,角色,和role_user。一个用户可以有很多角色,一个角色可以有很多用户。
role_user是默认的中间表或透视表。表的名字来自于角色和用户表,按字母顺序排列
关系是用belongsToMany方法定义的。

public function profiles(): BelongsToMany{    return $this->belongsToMany(Profile::class);}
  • 透视表
    如前所述透视表名称是从两个表的名称中产生的,并按字母顺序排序。如果需要,可以在belongsToMany方法的第二个参数中定义。
return $this->belongsToMany(Profile::class,'role_user');

除了定义透视表的名称外,和其他类型的关系一样,可以像下面的例子一样定义每个表的键。

return $this->belongsToMany(Profile::class,'role_user','user_id','role_id');

如果在透视表中还有其他字段/列,并通过写给withPivot 方法来定义。

return $this->belongsToMany(Profile::class)->withPivot('column1','column2');

这就是我这次能传达的教程,希望它能对你有用。

谢谢你.......