Переписать столбцы после установки его в области видимости - PullRequest
0 голосов
/ 18 февраля 2019

Я написал область действия, которая ограничивает все запросы к модели.Эти результаты должны содержать только данные, которые могут видеть зарегистрированные пользователи.Чтобы ограничить такой запрос, я присоединяюсь к пользовательской таблице и ограничиваю результаты идентификатором IN (?,?,?,?,?,?,?,?).Далее в этой области я использую select ([BASETABLE. '. *']), Потому что мне не нужны данные о партнерском присоединении.Пока здесь все работает нормально.Если я использую эту модель и заменяю столбцы на то, что мне нужно в этом случае, столбцы сохраняют определение из моей области.Я не могу перезаписать их позже.

У кого-нибудь есть решение или идея?

Я уже изучил классы (MysqlProcessor, MysqlConnection, Model, Eloquent \ Builder, Query \ Builder,...) Laravel, но не может найти решение.

// in scope called method to restrict
public function restrictByIds (Builder $query, Model $model)
{
    $ids = $this->getIdsByUser(); // [1,2,3,4,5,6]
    if (!empty($ids)) {
        $userModel = $model->user()->getModel();
        $userTable = $userModel->getTable();

        $query
            ->getQuery()
            ->select([$model->getTable() . '.*'])
            ->join(
                $userTable,
                $userTable . '.id',
                '=',
                $model->getTable() . '.user_id'
            )
            ->whereIn($userTable . '.id', $ids);
    }
}




// tries to overwrite columns
$model->getQuery()->select(['DATE(created) as time', 'count(*) AS count']);
$model->getQuery()->columns = ['DATE(created) as time', 'count(*) AS 
count'];
$model->getQuery()->addSelect(['DATE(created) as time', 'count(*) AS 
count']);
$model->getQuery()->addBinding(['DATE(created) as time', 'count(*) AS 
count'], 'select');
$model->getQuery()->bindings = ['select' => ['DATE(created) as time',
'count(*) AS count']];
$model->select(\DB::raw('DATE(created) as time, count(*) AS count'));
$model->columns = ['DATE(created) as time', 'count(*) AS count'];
$model->addSelect(\DB::raw('DATE(created) as time, count(*) AS count'));
$model->addBinding(['DATE(created) as time', 'count(*) AS count'], 
'select');
$model->bindings = ['select' => ['DATE(created) as time', 'count(*) AS 
count']];

1 Ответ

0 голосов
/ 19 февраля 2019

Я нашел решение. $ model = Model :: query () возвращает Eloquent \ Builder с активной областью действия.Для определения столбцов я использую $ model-> getQuery () -> select () .Для любых других функций (где, где In, orderBy, groupBy, ...) $ модель сама может быть использована.Таким образом, я получаю свои пользовательские столбцы с автоматическим ограничением.

И использую $ model-> getQuery () -> addSelect в областях вместо $ модели-> GetQuery () -.> выберите 1023 *

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