AVIL13.com
Динамическая смена таблиц в Eloquent

Динамическая смена таблиц в Eloquent

Задача:

Динамически меняя название таблиц в моделях Eloquent Laravel'a получать записи из базы данных цепочкой запросов.

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

Но для простоты изложения тут необходимая функция будет расположена непосредственно в рабочей модели.

Имеём:

Модель Eloquent, назовём её User. Она работает с таблицей users из нашей базы данных.

Решение:

В классе User создаём такую функцию, которая и будет динамически менять название рабочей таблицы.

public static function fromTable($table, $parms = Array()){
    $res = null;
    if (class_exists($table)){
        $res = new $table($parms);
    } else {
        $res = new static($parms);
        $res->setTable($table);
    }
    return $res;
}

Теперь мы сможем динамически изменять название таблицы, прямо во время запроса.

User::fromTable('cool_users')->get();