天天看點

laravel多對多關聯模型一、關聯模型(多對多)

本文目錄

  • 一、關聯模型(多對多)
    • 1.1 多對多關系(抽象)

一、關聯模型(多對多)

1.1 多對多關系(抽象)

例:一篇文章可能有多個關鍵詞,一個關鍵詞可能被多個文章使用。

關鍵詞表:

字段id 主鍵
字段keyword 關鍵詞

文章與關鍵詞的關系表:

字段id 主鍵
字段article_id 文章id
字段key_id 關鍵詞id

建立遷移檔案:

php artisan make:migration create_keyword_table

php artisan make:migration create_relation_table

laravel多對多關聯模型一、關聯模型(多對多)

編寫遷移檔案的代碼:

laravel多對多關聯模型一、關聯模型(多對多)
laravel多對多關聯模型一、關聯模型(多對多)

執行遷移

php artisan migrate

laravel多對多關聯模型一、關聯模型(多對多)
laravel多對多關聯模型一、關聯模型(多對多)

建立填充器:

php artisan make:seeder KeywordAndRelationTableSeeder

laravel多對多關聯模型一、關聯模型(多對多)

編寫填充器資料:

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use DB;

class KeywordAndRelationTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //關鍵詞資料
        DB::table('keyword') -> insert([
            ['keyword' => '搞笑'],
            ['keyword' => '文藝'],
            ['keyword' => '正片'],
            ['keyword' => '驚悚'],
            ['keyword' => '娛樂'],
            ['keyword' => '國術'],
        ]);

        //關系表
        DB::table('relation') -> insert([
            [
                'article_id' => rand(1,3),
                'keyword_id' => rand(1,6)
            ],
            [
                'article_id' => rand(1,3),
                'keyword_id' => rand(1,6)
            ],
            [
                'article_id' => rand(1,3),
                'keyword_id' => rand(1,6)
            ],
            [
                'article_id' => rand(1,3),
                'keyword_id' => rand(1,6)
            ],
        ]);
    }
}

           

執行填充器:

php artisan db:seed --class=KeywordAndRelationTableSeeder

laravel多對多關聯模型一、關聯模型(多對多)
laravel多對多關聯模型一、關聯模型(多對多)
laravel多對多關聯模型一、關聯模型(多對多)

案例:查詢出每個文章(主)下全部的關鍵詞(從)

文法:

上述文法提及到的關系鍵是指在關系表中的字段名。

建立關鍵詞模型:

php artisan make:model Keyword

laravel多對多關聯模型一、關聯模型(多對多)
laravel多對多關聯模型一、關聯模型(多對多)
laravel多對多關聯模型一、關聯模型(多對多)

建立案例路由:

laravel多對多關聯模型一、關聯模型(多對多)

建立案例控制方法:

// 關系模型多對多
    public function duoduiduo () {
        // 查詢文章
        $data = Article::all();
        // 循環
        foreach ($data as $key => $value) {
            // value是文章模型對象
            echo '文章id:'.$value -> id .'<br/>';
            echo '文章名稱:'.$value -> article_name .'<br/>';
            // 繼續循環關鍵詞
            foreach($value -> rel_keyword as $k => $v) {
                // $v是關鍵詞的模型對象
                echo '&emsp;&emsp;' . $v -> keyword .'<br/>';
            }
            echo '<hr/>';
        }
    }
           
laravel多對多關聯模型一、關聯模型(多對多)

效果:

laravel多對多關聯模型一、關聯模型(多對多)
在學習的php的路上,如果你覺得本文對你有所幫助的話,那就請關注點贊評論三連吧,謝謝,你的肯定是我寫博的另一個支援。