按yii2中的表名获取模型

按yii2中的表名获取模型,yii2,yii2-model,Yii2,Yii2 Model,我在几个模型中有一个方法,以不同的方式实现。 我只知道数据库中表的名称。我必须找到这张桌子的模型。 怎么办 interface BaseIndexedModel { public function writeSometext(); } 一些模型实现了它。范例 class First extends \yii\db\ActiveRecord implements BaseIndexedModel { public function writeSometext(){

我在几个模型中有一个方法,以不同的方式实现。 我只知道数据库中表的名称。我必须找到这张桌子的模型。 怎么办

interface BaseIndexedModel
{
    public function writeSometext();
}
一些模型实现了它。范例

class First extends \yii\db\ActiveRecord implements BaseIndexedModel
{
    public function writeSometext(){
       return "1";
    }
}

class Second extends \yii\db\ActiveRecord implements BaseIndexedModel
{
    public function writeSometext(){
       return "2";
    }
}
接下来在某个事件中,我需要调用所需的模型和此方法。但是当我调用时,我只知道数据库表,而不知道模型

如果表是第一个,则第一个::WriteMetext;
如果表是第二个,则第二个::WriteMetext

当您获得表名时,可以这样做

public function getModelName($table_name) {
    $table_name = 'first_table';  
    // $table_name = 'first';// if name is single word then comment the next line
    $table_split = explode("_",$table_name);
    $model = ucfirst($table_split[0]).ucfirst($table_split[1]);
    return $model;
}
你可以调用这个函数 并检查它是否存在

$model = getModelName($table_name);
var_dump($model);

如果您制作的模型正确,那么名称始终是tablenameHi的首字母大写!是的,我知道,但我仍在寻找另一个选项。好的,但请解释场景更多的原因以及您想如何使用它。我编辑了这个问题。我想要么您在某处有一个模型列表,要么是我告诉您的方法,因为您只从db知道表名,所以最好与表和模型同名。这更具动态性,但是模型名在Yii中没有前缀,而且他得到的是表名,您可以根据需要进行自定义,您可以添加额外的步骤,从表名中删除前缀,并且restModels没有前缀,但表名有前缀。这就是Gii生成模型名的方式,它仍然不是完美的:我知道,对于这个问题,这是好的,但不是所有的。因为我使用不同的模式,我不能使用crud,我不能处理它。