eloquent(没有laravel)使用动态名称从表中获取数据

dbf7pr2w  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(291)

我相信这是一个非常简单的问题,但对于我的生活,我被困在这里-由于php的限制,我们正在使用laravel以外的雄辩。我有一个支持票跟踪应用程序,我正在尝试更新。此应用程序的数据结构是这样的:提交时为每个票证分配一个uuid,并生成一个以该uuid作为其名称的表,对票证的所有更改都作为该表中的新条目进行跟踪。
根据一些关于eloquent的教程,我设置了模型和控制器并使其工作,但是对于每一个,我看到我在模型本身中定义表名。我们的票型是

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

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

在票证控制器中调用的任何东西都能正确地、成功地读写数据到我们的系统 tickets table。
所以。。。我的问题是:如何读取/写入/创建/删除前面提到的uuid表?
我试过内置的表选择器(即- DB::table(uuid here) 以及 DB::setTable(uuid here) 但无济于事。我明白了 Fatal error: Call to undefined method Models\Database::setTable() 我想要的是一个模型/控制器,我可以为任何动态命名的表重用。

1sbrub3j

1sbrub3j1#

您可以创建一个通用模型并动态设置表名,如下所示:

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
    }
}

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

相关问题