【问题标题】:Eloquent (WITHOUT Laravel) get data from table with dynamic nameEloquent(没有 Laravel)从具有动态名称的表中获取数据
【发布时间】:2018-10-24 10:35:14
【问题描述】:

我确信这是一个非常简单的问题,但对于我的生活来说,我被困在这里——由于 PHP 的限制,我们在 Laravel 之外使用 Eloquent。我有一个正在尝试更新的支持票证跟踪应用程序。 这个应用程序的数据结构是这样的,每张工单在提交时都被分配了一个 UUID,并生成了一个以该 UUID 作为其名称的表,并且对工单的所有更改都作为该表中的新条目进行跟踪。

按照 Eloquent 上的一些教程,我设置并运行了我们的模型和控制器,但是对于每一个,我看到我在模型本身中定义了表名。 IE我们的ticket模型是

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 mysql dynamic eloquent


    【解决方案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
        }
    }
    

    确保在使用前始终设置表名,否则会失败。出于同样的原因,也不要使用静态函数。

    【讨论】:

    • 我知道你要去哪里......我怎么能从我的核心操作文件中调用它?就像,现在当有人点击“编辑此票证”时,它会从我们的tickets 表中提取该票证的 UUID,将其设置为$uuid,然后我们有一个"SELECT blah, blah, blah FROM $uuid" 查询。
    • 谢谢,顺便说一句,我是 MVC 框架的新手,类关系总是把我搞砸了。
    • 如果我理解正确,您将获得作为表单输入的信息。将此设置为$uuid 变量并用作代码显示。
    • 啊!我想我明白了。让我进行一些测试。谢谢!!
    • 好吧——这很好用!我不知道您是否有解决方案的一个小问题是我收到了Strict Standards: Non-static method Controllers\Uuids::someAction() should not be called statically in /[filepath to core actions file] 。我们所有的动作调用都是通过 AJAX 请求从前端发送到 core.php(长篇故事)——它连接了我们所有的控制器和库以及诸如此类的东西,然后定义了特定的动作。这些操作调用各种控制器和数据集,然后根据操作的返回和类型触发其他操作。我希望这是有道理的。
    猜你喜欢
    • 2020-10-24
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    • 2016-09-09
    • 1970-01-01
    • 2018-07-23
    • 2020-12-12
    相关资源
    最近更新 更多