返回顶部
首页 > 资讯 > 精选 >Laravel中的Many-To-Many的用法
  • 230
分享到

Laravel中的Many-To-Many的用法

2023-06-20 13:06:23 230人浏览 八月长安
摘要

这篇文章主要介绍“Laravel中的Many-To-Many的用法”,在日常操作中,相信很多人在Laravel中的Many-To-Many的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Laravel中的

这篇文章主要介绍“Laravel中的Many-To-Many的用法”,在日常操作中,相信很多人在Laravel中的Many-To-Many的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Laravel中的Many-To-Many的用法”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

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

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

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

翻译过来就是:

  1. 一个用户对应一个用户档案

  2. 一个用户可以发表多篇文章

  3. 而文章和标签确实多对多的关系,一篇文章可以有多个标签;一个标签可以属于多篇文章

在这些关系模型中,最难实现的就是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();        });

当然,解决这个经典问题单单靠这两张表还不足够,需要在这两张表之外再建立一个关系表,用来将articletag联系起来,在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');    }

这里注意两点:

  1. 你可以在声明关系的时候指定外键,如$this->belongsToMany('App\Article','foreign_key', 'other_key');

  2. 如果在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的用法”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Laravel中的Many-To-Many的用法

本文链接: https://lsjlt.com/news/296938.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作