Php eloquent orm объединяет несколько столбцов в таблице в другую таблицу - PullRequest
0 голосов
/ 01 октября 2018

Допустим, у меня есть таблица Projects, в которой в определенном кортеже у меня много пользователей.Например:

Projects

id    project_name    developer    manager    tester
1          w             ww           z          t
2          qq            y          ll         mm
...

Теперь разработчик, менеджер и тестер являются пользователями из таблицы «Пользователи».Таблица проекта содержит имя пользователя пользователя.Скажем, таблица Users похожа на

Users
    id    username    first_name    last_name    email_add
     1        ww         John         Smith       js@gmail.com
   ...

, и я хочу отобразить информацию о проекте, но мне нужно полное имя (first_name + "" + last_name) всех пользователей, а не имя пользователя, которое хранится вТаблица Projects.

Какой эффективный способ подойти к этому?

1 Ответ

0 голосов
/ 01 октября 2018

Используйте отношение orm (см. https://laravel.com/docs/5.7/eloquent-relationships#defining-relationships)

и аксессор для полного имени. (См. https://laravel.com/docs/5.7/eloquent-mutators#defining-an-accessor)

Например, в модели проекта

class Project extends Model {
.....
     # set relation
     public function developer() {
          return $this->hasOne('App\User', 'developer', 'username');
     }
     public function manager() {
          return $this->hasOne('App\User', 'manager', 'username');
     }
     public function tester() {
          return $this->hasOne('App\User', 'tester', 'username');
     }
.....
}

In Userмодель

class User extends Authenticatable implements Member {
      .....
      # set relation
      public function project() {
           return $this->belongsTo('App\Project', 'user_id');
      }
      .....
      public function getFullNameAttribute(): string {
            if(!$this->cache_full_name) {
                 $this->cache_full_name = $this->first_name . ' ' . $this->last_name;
            }
            return $this->cache_full_name;
      }
      ......
 }

используется

$project = App\Project::query()->first();
echo $project->developer->full_name;
echo $project->manager->full_name;
echo $project->tester->full_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...