Laravel Красноречивый союз между двумя отношениями - PullRequest
1 голос
/ 21 апреля 2020

У меня есть две таблицы: пользователи и проекты и другая таблица с именем users_project , используемая для связи многих со многими.

Столбцы пользователей : id, имя, фамилия, ... (другие не важны для этого поста)

Колонки проектов: id, реклама, имя, ... (другие не важны для этого поста)

Users_project: user_id, project_id

В моем классе модели User у меня есть два метода:

public function commercial_projects() {
        return $this->hasMany('App\Project', 'commercial', 'id');
    }

и

public function assigned_projects() {
        return $this->belongsToMany(
            'App\Project',
            'users_project',
            'user_id',
            'project_id'
        );
    }

Этот метод работает нормально. Первый возвращает количество проектов, в которых пользователь участвует как коммерческий пользователь. Второй возвращает количество проектов, назначенных пользователю

. Я хочу иметь другой метод, который возвращает все проекты, в которых участвует пользователь (коммерческий или назначенный)

Я написал этот метод следующим образом:

public function projects() {

        return $this -> assigned_projects() -> union( $this->commercial_projects() );
    }

Но у меня есть ошибка, вызванная столбцом сводки, добавленным отношением ownToMany:

"SQLSTATE[21000]: Cardinality violation: 1222 The used SELECT statements have a different number of columns (SQL: (select `projects`.*, `users_project`.`user_id` as `pivot_user_id`, `users_project`.`project_id` as `pivot_project_id` from `projects` inner join `users_project` on `projects`.`id` = `users_project`.`project_id` where `users_project`.`user_id` = 13) union (select * from `projects` where `projects`.`commercial` = 13 and `projects`.`commercial` is not null))"

Как удалить сводный столбец из запроса базы данных или найти способ исправить эту проблему?

Tnx много

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...