Mysql
 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 Models ... само някои примери за това, което можете да направите.

// 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Обвързването на модел на маршрут не работи

  2. MySQL ред в брой колони и сума

  3. Как да вмъкнете в MySQL с помощта на подготвен оператор с PHP

  4. Присвояване на една и съща стойност на параметъра няколко пъти в изпълнение на pdo

  5. Пребройте колко реда имат една и съща стойност