Home > PHP Framework > Laravel > A brief analysis of Many-To-Many in Laravel

A brief analysis of Many-To-Many in Laravel

藏色散人
Release: 2021-07-03 09:02:25
forward
1282 people have browsed it

In actual development, we often come into contact with several common correspondence patterns:

One-To-One //一对一

One-To-Many //一对多

Many-To-Many //多对多
Copy after login

When I first came into contact with these concepts, I actually didn’t quite understand them. But once you apply these concepts to life, it's easy to understand. Let's take an example that we often see online:

User-To-Profile // One-To-One

User-To-Articles // One-To-Many

Articles-To-Tags // Many-To-Many
Copy after login

translates to:

  1. One user corresponds to one user profile
  2. A user can publish multiple articles
  3. There is a many-to-many relationship between articles and tags. An article can have multiple tags; a tag can belong to Multiple articles

Among these relationship models, the most difficult to implement is the many-to-many relationship Many-To-Many, but with the help of Laravel’s powerful Eloquent, it is quite satisfying to implement this function.

1. Create database table

Createarticlestable

Schema::create('articles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('content');
            $table->timestamps();
        });
Copy after login

Createtagstable

Schema::create('tags', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
Copy after login

Of course , to solve this classic problem, these two tables alone are not enough. It is necessary to establish a relationship table in addition to these two tables to connect article and tag. In Laravel, if you follow the official standard rules, the third table should look like this:

Table namearticle_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');
        });
Copy after login

If you do not follow the official specifications Now, you need to specify the foreign key in the model.

2. Create the model and specify the relationship

In Article.php:

<code><br>    public function tags()
    {
        return $this->belongsToMany('App\Tag');
    }</code>
Copy after login

In Tag.php:

public function articles()
    {
        return $this->belongsToMany('App\Article');
    }
Copy after login

Note two points here:

  1. You can specify foreign keys when declaring the relationship, such as $this->belongsToMany('App\Article',' foreign_key', 'other_key');
  2. If you add timestamps() in the article_tag table, that is, the two fields created_at and updated_at appear in the table, you need to do this when declaring the relationship in Article :return $this->belongsToMany('App\Tag')->withTimestamps();
##3. Use# in

Controller ## If we want to check which tags an article contains, we can do this:

$article = Article::find($id);

dd($article->tags);
Copy after login

If we want to find an article by a certain tag:

<code><br>public function showArticleByTagName($name)
    {
        $tag = Tag::where('value','=',$name)->first();

        dd($tag->articles);
    }</code>
Copy after login

The above is achieved.

Many-To-Many

. in Laravel

The above is the detailed content of A brief analysis of Many-To-Many in Laravel. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template