Eloquent (БЕЗ Laravel) получает данные из таблицы с динамическим именем

Я уверен, что это совершенно простой вопрос, но ради жизни я застрял здесь - мы используем Eloquent вне Laravel из-за ограничений PHP. У меня есть приложение для отслеживания заявок в службу поддержки, которое я пытаюсь обновить. Структура данных этого приложения такова, что каждому билету при отправке назначается UUID, и создается таблица с этим UUID в качестве имени, и все изменения в билете отслеживаются как новые записи в этой таблице.

После некоторых руководств по Eloquent я настроил и заработал наши модели и контроллеры, но для каждого из них я вижу, что я определяю имя таблицы в самой модели. IE наша модель билета

namespace Models;
use \Illuminate\Database\Eloquent\Model;

class Ticket extends Model {
   protected $table = 'tickets';
   protected $fillable = [table columns here];
}

и все, что вызывается в контроллере билетов, правильно и успешно читает и записывает данные в нашу таблицу tickets.

Итак ... мой вопрос: как мне начать чтение / запись / создание / удаление ранее упомянутых таблиц UUID?

Я пробовал встроенный селектор таблиц (например, DB::table(uuid here) и DB::setTable(uuid here), но безрезультатно. Я получаю Fatal error: Call to undefined method Models\Database::setTable()

Мне нужна модель / контроллер, которые я могу повторно использовать для ЛЮБОЙ таблицы с динамическим именем.

Стоит ли изучать 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
0
370
1

Ответы 1

Вы можете создать общую модель и динамически установить имя таблицы, например:

namespace Models;
use \Illuminate\Database\Eloquent\Model;

class FormerUUIDTicket extends Model {
   protected $table = 'some_table';
   protected $fillable = [table columns here];
}

class SomeController
{
    public function someAction()
    {
        $uuid = $_POST['uuid_field']; //some uuid, the table name
        $model = new FormerUUIDTicket;
        $model->setTable($uuid);
        return $model->get(); //do anything using eloquent with proper table
    }
}

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

Я вижу, куда вы собираетесь ... как я могу вызвать это из основного файла действий? Например, прямо сейчас, когда кто-то нажимает на «редактировать этот билет», он извлекает UUID для этого билета из нашей таблицы tickets, устанавливает его как $uuid, а затем у нас есть запрос "SELECT blah, blah, blah FROM $uuid".

Dan Kaufman 14.05.2018 22:15

спасибо, кстати, я новичок в фреймворках MVC, и отношения классов ВСЕГДА меня сбивали с толку.

Dan Kaufman 14.05.2018 22:16

Если я правильно понял, вы получите информацию в форме ввода. Установите это в переменную $uuid и используйте в качестве показа кода.

Felippe Duarte 14.05.2018 22:18

А! Думаю, я понял. Позвольте мне провести несколько тестов. Спасибо!!

Dan Kaufman 14.05.2018 22:26

Хорошо, это сработало отлично! Одна маленькая проблема, которую я не знаю, есть ли у вас решение, - это то, что я получаю Strict Standards: Non-static method Controllers\Uuids::someAction() should not be called statically in /[filepath to core actions file] . Все наши вызовы действий отправляются через запросы AJAX от внешнего интерфейса к core.php (длинная история), который связывает все наши контроллеры, библиотеки и многое другое, а затем определяет конкретные действия. Эти действия вызывают различные контроллеры и наборы данных, а затем запускают другие действия в зависимости от результата и типа действия. Я надеюсь это имеет смысл.

Dan Kaufman 14.05.2018 23:27

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