#laravel #laravel-5.2
#laravel #laravel-5
Вопрос:
Я хочу получать проекты с помощью Auth::user()
and company_id
. Я создал следующее:
База данных:
projects:
- id
- name
- company_id
project_users:
- id
- project_id
- user_id
users:
- id
- name
- email
companies:
- id
- name
Итак, я хочу получить текущие пользовательские проекты, которые принадлежат company_id .
Я попробовал следующее с User Modal -> return $this->hasManyThrough('AppProjectUsers', 'AppProject')
помощью . $user->projects->where('company_id', 1)
но он возвращает все данные (также с company_id 2,3,4 и т.д.).
Я ищу решение, которое может отфильтровывать проекты с company_id 1 из запроса.
Комментарии:
1. Возвращается ли hasManyThrough из метода проектов вашей пользовательской модели?
2. hasManyThrough возвращается из пользовательской модели.
3. Вы должны просто опубликовать свой код модели пользователя.
Ответ №1:
Вы должны создать функцию в модели пользователя
public function projectusers() {
return $this->hasMany('AppModelsproject_users', 'projectID')->with('companies');
}
теперь создайте функцию в модельных проектах
public function companies() {
return $this->hasMany('AppModelscompanies','id', 'company_id');
}
Комментарии:
1. Как мне получить проекты только where
company = 1
?2. возвращает $this->hasMany(‘AppModelscompanies’,’id’, ‘company_id’)->where(‘company’, 1);
Ответ №2:
Если вы пытаетесь ограничить отношение на основе результатов другого отношения, тогда вам нужно использовать whereHas
.
Кроме того, если вы хотите получить проекты по какому-либо условию, я считаю, что часто наиболее полезно начинать с проектов.
$projects = AppProject::whereHas('company', function($q) use ($company_id) {
$q->where('id', $company_id);
})->with('users')->get();
Это позволит захватывать только проекты, принадлежащие определенной компании, а также загружать пользователей.
По мере выполнения цикла вы можете получить количество пользователей, используя отношение.
foreach ($projects as $project) {
echo 'Num User: '.$project->users->count();
}
Комментарии:
1. Пользователи, связанные с проектами, находятся в отдельной таблице project_users . В проекте может быть 0 или более пользователей.
2. О, я понимаю, что вы говорите, я думаю, это близко к тому, что вы хотите, но как вы получаете проект от пользователей, если может быть 0, 1 или много пользователей?
3. Мне нужна страница, на которой системный администратор может видеть, сколько проектов у пользователя. Так, например
user1 is assigned to 6 projects
, иuser2 is assigned to 1 project
. Вот в чем причина этого. Но системному администратору из компании 1 не разрешено видеть, связан ли пользователь с другой компанией и сколько у них проектов.4. Хорошо, это имеет больше смысла, вы просто хотите загружать пользователей вместе с проектами после того, как вы уже ограничили проекты на основе идентификатора компании. Я обновил код.