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

A brief analysis of Many-To-Many in Laravel

藏色散人
藏色散人forward
2021-07-02 14:21:491238browse

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

One-To-One //一对一

One-To-Many //一对多

Many-To-Many //多对多

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

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();
        });

Createtagstable

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

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');
        });

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>

In Tag.php:

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

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);

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>

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!

Statement:
This article is reproduced at:segmentfault.com. If there is any infringement, please contact admin@php.cn delete