Laravel Many-To-Many多对多关系模式示例详解

2023-12-05 0 682
目录
  • 常见的对应关系模式
    • 1. 创建数据库表
    • 2. 创建模型并指定关系
    • 3. 在Controller中使用

常见的对应关系模式

在实际的开发中,我们经常会接触到几种常见的对应关系模式:

One-To-One //一对一
One-To-Many //一对多
Many-To-Many //多对多

在刚刚开始接触到这些概念的时候,其实我是不太理解的。但是一旦你将这些概念应用到生活中,理解起来就很简单了,就举一个与我们在网上经常见到的例子:

User-To-Profile // One-To-One
User-To-Articles // One-To-Many
Articles-To-Tags // Many-To-Many

翻译过来就是:

  • 一个用户对应一个用户档案
  • 一个用户可以发表多篇文章
  • 而文章和标签确实多对多的关系,一篇文章可以有多个标签;一个标签可以属于多篇文章

在这些关系模型中,最难实现的就是Many-To-Many这种多对多的关系,不过借助Laravel的强大的Eloquent,实现这个功能还是比较顺心的。

1. 创建数据库表

创建articles表

Schema::create(\’articles\’, function (Blueprint $table) {
$table->increments(\’id\’);
$table->string(\’title\’);
$table->text(\’content\’);
$table->timestamps();
});

创建tags表

Schema::create(\’tags\’, function (Blueprint $table) {
$table->increments(\’id\’);
$table->string(\’name\’);
$table->timestamps();
});

当然,解决这个经典问题单单靠这两张表还不足够,需要在这两张表之外再建立一个关系表,用来将article和tag联系起来,在Laravel中,如果你遵循官方的标准规则,第三张表应该是这样的:

表名article_tag

Schema::create(\’article_tag\’, function(Blueprint $table) {
$table->integer(\’article_id\’)->unsigned()->index();
$table->foreign(\’article_id\’)->references(\’id\’)->on(\’articles\’)->onDelete(\’cascade\’);
$table->integer(\’tag_id\’)->unsigned()->index();
$table->foreign(\’tag_id\’)->references(\’id\’)->on(\’tags\’)->onDelete(\’cascade\’);
});

如果你没有按照官方的规范来,你需要在模型中指定外键。

2. 创建模型并指定关系

在Article.php中:

public function tags()
{
return $this->belongsToMany(\’App\\Tag\’);
}

在Tag.php中:

public function articles()
{
return $this->belongsToMany(\’App\\Article\’);
}

这里注意两点:

  • 你可以在声明关系的时候指定外键,如$this->belongsToMany('App\\Article','foreign_key', 'other_key');
  • 如果在article_tag表中你添加了timestamps(),即表中出现created_at和updated_at这两个字段,在Article中声明关系的时候需要这样:return $this->belongsToMany('App\\Tag')->withTimestamps();

3. 在Controller中使用

如果我们想查看某个文章含有哪些标签,我们可以这样:

$article = Article::find($id);
dd($article->tags);

如果我们想通过某个标签来查找文章:

public function showArticleByTagName($name)
{
$tag = Tag::where(\’value\’,\’=\’,$name)->first();
dd($tag->articles);
}

以上,就实现了在Laravel中的Many-To-Many,更多关于Laravel 多对多关系模式的资料请关注悠久资源网其它相关文章!

您可能感兴趣的文章:

  • 掌握Laravel框架中容器的管理依赖实现松耦合
  • Laravel Eloquent取上一条和下一条数据的id实现讲解
  • Laravel多条件where查询语句使用详解
  • Laravel Eloquent的九个实用特性详解
  • Laravel中ServiceProvider使用场景示例详解
  • Laravel生命周期启动(从创建应用实例到注册基础服务)过程解析

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 PHP Laravel Many-To-Many多对多关系模式示例详解 https://www.u-9.cn/biancheng/php/94776.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务