Heim > PHP-Framework > Laravel > Hauptteil

Eine kurze Analyse von Many-To-Many in Laravel

藏色散人
Freigeben: 2021-07-03 09:02:25
nach vorne
1235 Leute haben es durchsucht

In der tatsächlichen Entwicklung kommen wir oft mit mehreren gängigen Korrespondenzmustern in Berührung:

One-To-One //一对一

One-To-Many //一对多

Many-To-Many //多对多
Nach dem Login kopieren

Als wir anfingen, mit diesen Konzepten in Kontakt zu kommen, habe ich es tatsächlich nicht getan Ich verstehe es nicht ganz. Aber sobald man diese Konzepte auf das Leben anwendet, ist es sehr einfach zu verstehen. Nehmen wir ein Beispiel, das wir oft online sehen:

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

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

Articles-To-Tags // Many-To-Many
Nach dem Login kopieren

Übersetzt in:

  1. Ein Benutzer entspricht einem Benutzerprofil
  2. Ein Benutzer kann mehrere Artikel veröffentlichen
  3. Und Artikel und Tags haben eine Viele-zu-Viele-Beziehung; ein Tag kann zu mehreren Artikeln gehören.

Unter diesen Beziehungsmodellen ist Many-To das am schwierigsten zu implementierende -ManyDies ist eine Viele-zu-Viele-Beziehung, aber mit Hilfe von Laravels leistungsstarkem Eloquent ist es relativ reibungslos, diese Funktion zu implementieren. Many-To-Many这种多对多的关系,不过借助Laravel的强大的Eloquent,实现这个功能还是比较顺心的。

1. 创建数据库表

创建articles

Schema::create('articles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->text('content');
            $table->timestamps();
        });
Nach dem Login kopieren

创建tags

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

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

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

2. 创建模型并指定关系

Article.php中:

<code><br>    public function tags()
    {
        return $this->belongsToMany('App\Tag');
    }</code>
Nach dem Login kopieren

Tag.php中:

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

这里注意两点:

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

3. 在Controller中使用

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

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

dd($article->tags);
Nach dem Login kopieren

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

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

        dd($tag->articles);
    }</code>
Nach dem Login kopieren

以上,就实现了在Laravel中的Many-To-Many

1. Datenbanktabelle erstellen

Artikel-Tabelle erstellen
rrreee🎜Tags-Tabelle erstellen🎜rrreee🎜Natürlich hängt die Lösung dieses klassischen Problems nur davon ab Diese beiden Tabellen reichen nicht aus. Sie müssen zusätzlich zu diesen beiden Tabellen eine Beziehungstabelle erstellen, um article und tag zu verbinden Nach den offiziellen Standardregeln sollte die dritte Tabelle so aussehen: 🎜🎜Tabellenname article_tag🎜rrreee🎜Wenn Sie sich nicht an die offiziellen Spezifikationen halten, müssen Sie Fremdschlüssel im Modell angeben. 🎜

2. Erstellen Sie das Modell und geben Sie die Beziehung an

🎜In Article.php: 🎜rrreee🎜In Tag.php: 🎜rrreee🎜Hinweis hier Zwei Punkte: 🎜🎜🎜Sie können den Fremdschlüssel angeben, wenn Sie die Beziehung deklarieren, z. B. $this->belongsToMany('AppArticle','foreign_key', 'other_key');🎜🎜Wenn in Article_tag Sie haben timestamps() zur Tabelle hinzugefügt, d ')->withTimestamps ();🎜🎜

3. Wird in Controller

🎜 verwendet. Wenn wir sehen möchten, welche Tags ein Artikel enthält, können wir dies tun :🎜rrreee🎜Wenn wir Artikel nach einem bestimmten Tag finden möchten: 🎜rrreee🎜Das Obige implementiert Many-To-Many.🎜🎜 in Laravel

Das obige ist der detaillierte Inhalt vonEine kurze Analyse von Many-To-Many in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!