简析Laravel中的Many-To-Many
时间:2022-03-03 11:48
在实际的开发中,我们经常会接触到几种常见的对应关系模式: 在刚刚开始接触到这些概念的时候,其实我是不太理解的。但是一旦你将这些概念应用到生活中,理解起来就很简单了,就举一个与我们在网上经常见到的例子: 翻译过来就是: 在这些关系模型中,最难实现的就是 创建 创建 当然,解决这个经典问题单单靠这两张表还不足够,需要在这两张表之外再建立一个关系表,用来将 表名 如果你没有按照官方的规范来,你需要在模型中指定外键。 在 在 这里注意两点: 如果我们想查看某个文章含有哪些标签,我们可以这样: 如果我们想通过某个标签来查找文章: 以上,就实现了在Laravel中的 以上就是简析Laravel中的Many-To-Many的详细内容,更多请关注www.gxlsystem.com其它相关文章!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');
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);
}Many-To-Many
.