Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Laravel:Jak korzystać z wielu relacji tabeli przestawnej

Ta konfiguracja powinna Ci pomóc. Starałem się, aby nazewnictwo było jak najprostsze.

users
    id
    username

challenge_user
    user_id
    challenge_id

challenges
    id
    name
    topic_id      
    category_id

topics
    id
    name

categories
    id
    name

Definiowanie swoich elokwentnych modeli

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

Używając swoich elokwentnych modeli ... tylko kilka przykładów tego, co możesz zrobić.

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

Odniesienia i sugerowana lektura:

Elokwentne relacje Laravel belongsTo belongsToMany hasMany

Zapytywanie o relacje Model::has()

Ładowanie chętnych Model::with()

Dynamiczne właściwości dostępu do relacji Rozwiąż $model->relationship

Wstawianie powiązanych modeli attach() associate()

Zakresy zapytań

Praca z tabelami przestawnymi Jeśli potrzebujesz pobrać dodatkowe dane z tabeli przestawnej.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak usunąć wiodące i końcowe znaki w MySQL?

  2. porównywanie daty i czasu php

  3. MySqlParameter jako TableName

  4. Nie udało się zaktualizować SonarQube z 4.5.2 do 5.0

  5. Indeksowanie dla operacji BINARY LIKE w MySQL