sql >> データベース >  >> RDS >> Mysql

Laravel:複数のピボットテーブルの関係を使用する方法

    この設定でうまくいくはずです。ネーミングはできるだけシンプルにしようとしました。

    users
        id
        username
    
    challenge_user
        user_id
        challenge_id
    
    challenges
        id
        name
        topic_id      
        category_id
    
    topics
        id
        name
    
    categories
        id
        name
    

    Eloquentモデルの定義

    class User extends Eloquent {
        public function challenges() {
            return $this->belongsToMany('Challenge');
        }
    }
    
    class Challenge extends Eloquent {
        public function users() {
            return $this->belongsToMany('User');
        }
        public function topic() {
            return $this->belongsTo('Topic');
        }
        public function category() {
            return $this->belongsTo('Category');
        }
    }
    
    class Topic extends Eloquent {
        public function challenges() {
            return $this->hasMany('Challenge');
        }
    }
    
    class Category extends Eloquent {
        public function challenges() {
            return $this->hasMany('Challenge');
        }
    }
    

    Eloquentモデルの使用...あなたができることのほんの一例です。

    // Collection of all Challenges by Topic name
    Topic::with('challenges')->whereName($topic_name)->first()->challenges;
    
    // Collection of all Challenges by Category name
    Category::with('challenges')->whereName($category_name)->first()->challenges;
    
    // Collection of all Users by Challenge id
    Challenge::with('users')->find($challenge_id)->users;
    
    // Collection of Users with atleast 2 Challenges
    User::has('challenges', '>', 1)->get();
    
    // Attach Challenge to User
    $user = User::find($id);
    $user->challenges()->attach($challenge_id);
    
    // Assign a Topic to a Challenge
    $challenge = Challenge::find($challenge_id);
    $topic     = Topic::find($topic_id);
    
    $challenge->topic()->associate($topic);
    $challenge->save();
    

    参考資料と推奨読書:

    Laravel Eloquent Relationships belongsTo belongsToMany hasMany

    リレーションのクエリ Model::has()

    積極的な読み込み Model::with()

    リレーションにアクセスするための動的プロパティ $model->relationshipを解決します

    関連モデルの挿入 attach() associate()

    クエリスコープ

    ピボットテーブルの操作 ピボットテーブルから追加のデータを取得する必要がある場合。




    1. MySQL:ORDER BY RAND()の代替

    2. OracleのNVL2機能

    3. PostgreSQLCommitfestの管理

    4. mysqlselectレコードが3か月を超える