За последние 24 часа нас посетил 20591 программист и 1010 роботов. Сейчас ищут 375 программистов ...

Model: изменение protected $table

Тема в разделе "Laravel", создана пользователем vah-smile, 29 июл 2019.

  1. vah-smile

    vah-smile Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    162
    Симпатии:
    1
    Адрес:
    Украина, Ровно
    Добрый день.
    Как можно изменить значение protected $table при подключении модели в контроллере?

    Зачем: у меня для каждой страницы с вопросамы создана своя таблица:
    answers_01, answers_02, ... , answers_30

    Создавать и подключать все 30 моделей в контроллере для каждой таблицы - думаю не стоит, тем более, что структура таблиц одинакова.

    При создании новой записи сейчас использую класс:
    PHP:
    1. class Answers extends Model
    2. {
    3.     protected $table = 'answers_';
    4.     public $timestamps = true;
    5.  
    6.     public static function table($id)
    7.     {
    8.         $this->table = 'answers_'.$id;
    9.     }
    10. }
    и в контроллере вызываю:

    PHP:
    1. $answers = new Answers;
    2. $answers->table('01');
    3. ...
    4. $answers->save();
    Нужно воспользоваться методом firstOrNew. Пробовал сделать вот так:
    Код (Text):
    1. $answers = Answers::table('01');
    но получил ошибку:

    Using $this when not in object context
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Так не работает. Объект модели не может менять таблицу.
    Смотри "полиморфные связи" чтобы как-то распределять обращение к разным моделям-таблицам.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    --- Добавлено ---
    меняй статический метод, либо синглетон
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    не надо так делать :) Сделай категории вопросов и поле в одной таблице. Ты своей тысячью таблиц ничего вообще не выигрываешь. С индексом по категории выборка будет работать очень быстро.
    --- Добавлено ---
    Вообще, по опыту, в Laravel лучше не вмешиваться в его кухню, называть ключи так, как ожидает Laravel, называть таблицы так, как ожидает Laravel и т.п. Он тогда лучше работает.
     
    Dmitry Lazarev нравится это.