Mysql
 sql >> база данни >  >> RDS >> Mysql

Laravel 5.5 шарнирно свързване, за да получите опорни стойности с основния MySQL резултат

Имах подобна ситуация и Обхват на заявката заедно с моята централна таблица за релация едно към много. В моята ситуация потребителят има множество групи и трябва да извлека тези данни заедно с потребителски обект без допълнителна заявка или без JOIN. Вижте Query scope и един към много и много към много с опора на Laravel Doc.

Ако искате да извлечете данни с помощта на въртяща се таблица, ето примерния
Потребителски модел:

class User extends Authenticatable
{
    use Notifiable;


    protected $fillable = [
        'name', 'email', 'username', 'password',
    ];


    protected $hidden = [
        'password', 'remember_token',
    ];


    public function groups()
    {
        return $this->belongsToMany('App\Group', 'user_groups', 
          'user_id', 'group_id');
    }
    public function scopeDetail($query)
    {
        return $query->with('groups');
    }
}

Групов модел:

class Group extends Model
{
    protected $fillable = [
        'dn', 'cn', 'description',
    ];
}

В потребителския модел по-горе вижте return $this->belongsToMany('App\Group','user_groups', 'user_id', 'group_id'); , където user_groups е моята основна таблица, която дефинира връзката между потребители и група. group_id и user_id са полетата в обобщената таблица.

Сега се извличат данни (на контролера) с помощта на горната архитектура:

User::where(.....)->detail()->first();

където detail() е моят обхват, дефиниран в потребителския модел като scopeDetail . Забележка:scope трябва да бъде приложен префикс. Това ще ви даде потребителя с всички групи, към които принадлежи потребителят в масива, така че всеки път, когато преглеждате данните си в JSON, можете да видите структурата по правилен начин.

Използвайки горния метод, моят потребител обектът има всички групи, към които принадлежи потребителят.

Допълнително
Ако вашият потребителски модел(потребители) също е свързан с други модели, тогава можете да включите всички тези, като дефинирате обхват в класа на модела като

............
//..............
    public function profile()
    {
        return $this->belongsToMany('App\Profile', 'user_id');
    }
    public function data1()
    {
        return $this->belongsToMany('App\Data1', 'user_id');
    }
    public function groups()
    {
        return $this->belongsToMany('App\Group', 'user_groups', 
          'user_id', 'group_id');
    }
    //Defining query scope................
    public function scopeDetail($query)
    {
        return $query->with('groups','profile','data1');
        //to fetch user with this scope use User::where(.....)->detail()->get(); notice there is not scope prefix while using the scope
    }
........
........



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проблеми при стартиране на Mysql | ГРЕШКА! Сървърът излезе без актуализиране на PID файла

  2. JPA Запазване на грешна дата в MySQL база данни

  3. Какъв е най-добрият начин да направите заявка за поле за дата и час спрямо полета за дата?

  4. Вложено Вмъкване в и изберете оператор

  5. Пренаписване на mysql select за намаляване на времето и запис на tmp на диск