На моем веб-сайте у меня есть таблица проекта, которая имеет отношение многие ко многим с другой таблицей project_user,
В таблице проекта у меня есть строка, которая выглядит так,
| ID | NAME |
|-----|-------------|
| 1 | Project 1 |
В таблице project_user у меня есть несколько строк, которые выглядят так,
| ID | PROJET_ID | USER_ID |
|-----|-------------|---------|
| 1 | 1 | 2 |
| 1 | 1 | 4 |
| 1 | 1 | 10 |
Модель проекта выглядит так,
class Project extends Eloquent {
protected $fillable = [
'name',
'description',
'total_cost',
'start_date',
'finish_date',
'sales_person',
'project_manager',
'client_id',
'organisation_id',
'user_id'
];
public function collaborators() {
return $this->belongsToMany('User');
}
}
И модель для пользовательской таблицы выглядит так,
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'users';
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = array('password', 'remember_token');
public function users()
{
return $this->belongsToMany('Project');
}
}
Что я хочу знать, так это как я могу получить проект из базы данных вместе с пользовательскими данными для соответствующих пользователей? Я сейчас пытаюсь это,
$project = Project::whereHas('user', function($q)
{
//$q->where('user_id', '=', ResourceServer::getOwnerId());
})->get();
Я полагаю, ваше отношение project
не users
так что все довольно просто:
$user->load('projects.users');
$user->projects; // collection of user's projects
$user->projects->first()->collaborators; // collection of users in signle project
Если вы хотите только один проект, то вы можете сделать:
$user->projects()->find($projectId)->collaborators;
То, как вы пытались, также будет работать:
Project::whereHas('collaborators', function ($q) {
$q->where( .. );
})->with('collaborators')->get();
Других решений пока нет …