比方说,我有一个表Projects,其中在一个特定的元组中,我有许多用户。例如:
Projects
id project_name developer manager tester
1 w ww z t
2 qq y ll mm
...
现在,开发人员,经理和测试人员是“用户”表中的用户。 项目表包含用户的用户名。 说用户表就像
Users
id username first_name last_name email_add
1 ww John Smith js@gmail.com
...
我想显示有关该项目的信息,但我需要所有用户的全名(first_name +“” + last_name),而不是存储在Projects表中的用户名。
什么是解决此问题的有效方法?
答案 0 :(得分:1)
使用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');
}
.....
}
在用户模型中
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;