Propel Query中的动态表名

时间:2016-04-04 11:32:33

标签: php propel

我想知道你是否可以使推进查询的表名动态(有点像变量变量)?一个例子就像\" DynamicVar" Query :: create()。我在下面的例子中使用ifs,但如果动态更强,可以摆脱相当多的行。这些表都设置相同,因此它们可以被视为具有不同名称的相同对象。

目前发生了类似的事情:

//$dynamic is a result of grabbing it from a different table 
//that corresponds to values passed by AJAX
$dyanmic = "Customer"
$query = null;
If( $dynamic == "Customer" ) $query = \CustomerQuery()::create();
If( $dynamic == something2 ) $query = \Table2Query()::create();
If( $dynamic == something3 ) $query = \Table3Query()::create();

If( $query != null ) {
   $query->filterBy("something");
   $query->find();
}

1 个答案:

答案 0 :(得分:2)

我玩了一些代码,只要每个表都可以被视为同一个对象,下面的代码将用于动态更改表。您可以定义$ table并以这种方式使用它来返回一个返回所需对象的函数

function Get_Table($table,$id){
    $query = null;
    $queryClass = '\\'. ucfirst($table) . 'Query';
        if ( class_exists( $queryClass ) ) {
            $$dynamics = $queryClass::create()
                ->filterById($id)
                ->find();

            if( $dynamics->getFirst() == null ) { return false; }
            /** @var \Base\.ucfirst($table) $dynamic*/
            $dynamic= $dynamics->getFirst();

            return $dynamic;
        }

        //On Failure
        else {
            return false;
        }
}