Запрос для получения сведений о персонале (сводная таблица)

У меня есть эти модели:

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?

С наилучшими пожеланиями

Как сотрудники связаны с parent_page? нигде нет parent_page_id

mrhn 10.07.2019 09:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Немного запутался, как 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) ¿?

JJMontalban 10.07.2019 09:48

вы можете просто сделать has('pages.parent'), это выведет всех сотрудников, у которых есть страницы с родителями, это та логика, которую вы хотите?

mrhn 10.07.2019 09:50

Нет. Мне нужны "все сотрудники, содержащиеся в page_staff. Но только с page_staff.page_id == parent_page.id"

JJMontalban 10.07.2019 10:00

Нисколько. $staffWithPages = Staff::has('pages.parent')->get() вернуть сотрудников, содержащихся в page_staff (со страницами), но этот результат не фильтруется по parent_page.id. where page_staff.page_id == parent_page.id фильтр отсутствует. Как включить это в запрос?

JJMontalban 10.07.2019 10:17

Обновлен вопрос, где flaky не нужно тестировать, но посмотрите, поможет ли это, если возникнет какая-либо ошибка, я помогу

mrhn 10.07.2019 10:22

Извиняюсь. Я не прав. Мне нужны все сотрудники, содержащиеся в PAGE_STAFF. где page_staff.page_id == page.id И page.parent_id == parent_page.id

JJMontalban 10.07.2019 10:50

Я пробовал: 'staff' => Staff::whereHas('pages.parent', function ($query) { $query->where('page_staff.page_id', 'page.id') ->where('page.parent_id', 'parent_page.id'); })->get() но не показывает ни одного файла

JJMontalban 10.07.2019 10:51

вы можете попробовать просто с $query->where('parent_page.id', '!=', 'page_staff.page_id'); и убедитесь, что ваши данные отражают, что этот запрос будет работать

mrhn 10.07.2019 10:59

Я получил эту ошибку: 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)`

JJMontalban 10.07.2019 11:26

aghrr yh он присоединяется к той же таблице с родительской структурой, посмотрите, если $query->where('laravel_reserved_0.id', '!=', 'page_staff.page_id'); может помочь вам, не лучшее решение, но давайте отправим вас туда, где вы можете это исправить :)

mrhn 10.07.2019 11:28

Я просто не знаю, что вы подразумеваете под фильтрацией по родительскому идентификатору, когда я снова читаю вопрос, кажется, что has('pages.parent'); должно сработать,

mrhn 10.07.2019 11:57

Каждая страница имеет parent_id. Затем каждый результат запроса page_id должен иметь parent_id == parent_page.id. В другом случае не получить

JJMontalban 10.07.2019 12:02

Другие вопросы по теме

TYPO3 9 Ошибка приведения типа LTS в поле времени mysql для ввода типа TCA / экономия времени dbType в пустом поле
Транзакция Laravel не откатывается, если не происходит исключения БД
Нарушение ограничения целостности, соединяющее таблицы MySql
Какой из двух запросов лучше всего использовать для повышения производительности?
MySQL Как сгруппировать по подсчитанному столбцу?
Обновите и добавьте новую таблицу записей с объединением в MySQL
Как получить максимальное значение сгруппированной подсчитанной переменной в MySQL
Получите столбец со списком идентификаторов object_id, которые встречаются вместе более одного раза, и второй столбец со счетчиком того, сколько раз он встречается
Переберите 2 списка, чтобы создать несколько курсоров sql с 2 изменяющимися переменными в каждом курсоре
Mysql, как объединить и сгруппировать два столбца в разных таблицах