У меня есть эти модели:
STAFF
-----
id
name
PAGE_STAFF
----------
page_id
staff_id
PAGE
----
id
title
parent_id
PARENT_PAGE
-----------
id
title
И такие методы отношений:
in Staff Model
/**
* The areas that belongs to the staff member.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function pages()
{
return $this->belongsToMany(Page::class);
}
in Page Model
/**
* The staff that belongs to the page.
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function staff()
{
return $this->belongsToMany(Staff::class);
}
PARENT_PAGE содержит идентификатор (и заголовок) «главной страницы». Эта модель не связана ни с одной моделью и я использую ее для фильтрации вхождений. Я имею в виду, что мне нужен только page_id из page_staff, что parent_page.id == page_staff.page_id.
Но мне нужно знать записи в сводной таблице "page_staff". Нужен запрос
все сотрудники (page_staff.staff_id), которые содержатся в модели "page_staff" и page_staff.page_id == parent_page.id.
После этого мне нужны все модели персонала (staff.id)
Как я могу сделать это в Eloquent?
С наилучшими пожеланиями






Немного запутался, как ParentPage связан со всем этим. Чтобы получить весь персонал, который есть в сводной таблице, мы можем сделать это с помощью has(). Обновлю вопрос, когда узнаю, где находится родительская страница в этом домене.
$staffWithPages = Staff::whereHas('pages.parent', function ($query) {
$query->where('laravel_reserved_0.id', '!=', 'page_staff.page_id');
})->get();
Если вы хотите получить идентификатор, используйте метод выщипывания Laravel Collection.
$staffWithPages->plukc('id')->all();
Я думаю, что это правильно: $staffWithPages = Staff::has('pages')->get(); но как вы говорите. Отношения с parent_page — это только получение вхождений (может быть: где page.parent_id == parent_page.id) ¿?
вы можете просто сделать has('pages.parent'), это выведет всех сотрудников, у которых есть страницы с родителями, это та логика, которую вы хотите?
Нет. Мне нужны "все сотрудники, содержащиеся в page_staff. Но только с page_staff.page_id == parent_page.id"
Нисколько. $staffWithPages = Staff::has('pages.parent')->get() вернуть сотрудников, содержащихся в page_staff (со страницами), но этот результат не фильтруется по parent_page.id. where page_staff.page_id == parent_page.id фильтр отсутствует. Как включить это в запрос?
Обновлен вопрос, где flaky не нужно тестировать, но посмотрите, поможет ли это, если возникнет какая-либо ошибка, я помогу
Извиняюсь. Я не прав. Мне нужны все сотрудники, содержащиеся в PAGE_STAFF. где page_staff.page_id == page.id И page.parent_id == parent_page.id
Я пробовал: 'staff' => Staff::whereHas('pages.parent', function ($query) { $query->where('page_staff.page_id', 'page.id') ->where('page.parent_id', 'parent_page.id'); })->get() но не показывает ни одного файла
вы можете попробовать просто с $query->where('parent_page.id', '!=', 'page_staff.page_id'); и убедитесь, что ваши данные отражают, что этот запрос будет работать
Я получил эту ошибку: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'parent_page.id' in 'where clause' (SQL: select * from staff`, где существует (выберите * из page внутреннего соединения page_staff на page.id = page_staff.page_id, где staff.id = page_staff.staff_id и существует (выберите * из page как laravel_reserved_0, где laravel_reserved_0.id = page. parent_id и parent_page.id != page_staff.page_id и laravel_reserved_0.deleted_at равно null) и page.deleted_at равно null) и staff.deleted_at равно null)`
aghrr yh он присоединяется к той же таблице с родительской структурой, посмотрите, если $query->where('laravel_reserved_0.id', '!=', 'page_staff.page_id'); может помочь вам, не лучшее решение, но давайте отправим вас туда, где вы можете это исправить :)
Я просто не знаю, что вы подразумеваете под фильтрацией по родительскому идентификатору, когда я снова читаю вопрос, кажется, что has('pages.parent'); должно сработать,
Каждая страница имеет parent_id. Затем каждый результат запроса page_id должен иметь parent_id == parent_page.id. В другом случае не получить
Как сотрудники связаны с parent_page? нигде нет parent_page_id