Я уверен, что это совершенно простой вопрос, но ради жизни я застрял здесь - мы используем 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()
Мне нужна модель / контроллер, которые я могу повторно использовать для ЛЮБОЙ таблицы с динамическим именем.






Вы можете создать общую модель и динамически установить имя таблицы, например:
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
}
}
Убедитесь, что вы всегда задаете имя таблицы перед использованием, иначе это не удастся. Не используйте статические функции по той же причине.
спасибо, кстати, я новичок в фреймворках MVC, и отношения классов ВСЕГДА меня сбивали с толку.
Если я правильно понял, вы получите информацию в форме ввода. Установите это в переменную $uuid и используйте в качестве показа кода.
А! Думаю, я понял. Позвольте мне провести несколько тестов. Спасибо!!
Хорошо, это сработало отлично! Одна маленькая проблема, которую я не знаю, есть ли у вас решение, - это то, что я получаю Strict Standards: Non-static method Controllers\Uuids::someAction() should not be called statically in /[filepath to core actions file] . Все наши вызовы действий отправляются через запросы AJAX от внешнего интерфейса к core.php (длинная история), который связывает все наши контроллеры, библиотеки и многое другое, а затем определяет конкретные действия. Эти действия вызывают различные контроллеры и наборы данных, а затем запускают другие действия в зависимости от результата и типа действия. Я надеюсь это имеет смысл.
Я вижу, куда вы собираетесь ... как я могу вызвать это из основного файла действий? Например, прямо сейчас, когда кто-то нажимает на «редактировать этот билет», он извлекает UUID для этого билета из нашей таблицы
tickets, устанавливает его как$uuid, а затем у нас есть запрос"SELECT blah, blah, blah FROM $uuid".