使用Propel获取结果时如何忽略字段?

时间:2012-04-03 01:20:13

标签: php propel ignore

我需要在获取数据或反向选择字段中忽略字段而不是选择字段。

这可能吗?如果是,怎么样?

2 个答案:

答案 0 :(得分:1)

关于文档,不可能:http://propelorm.org/reference/model-criteria.html#getting-columns-instead-of-objects

但你可以自己做。

构建一个字段数组(基于您的同类)并删除构建查询时不需要的字段

$fields = MyTablePeer::$fieldKeys[BasePeer::TYPE_PHPNAME];

/**
   will give you (for example):

   array (
     'Id' => 0, 
     'Name' => 1, 
     'Content' => 2, 
   )
 */

// remove unwanted column
unset($fields['Name']);

$items = MyTableQuery::create()
  ->select(array_keys($fields))
  ->find();
}

答案 1 :(得分:0)

对于Propel版本2,您可以执行以下操作(与j0k的回答相同):

$fields = MyTableTableMap::getFieldNames("phpName");

/**
will give you (for example):

array (
    'Id,
    'Name',
    'Content'
)
*/

// remove unwanted columns
$fields = array_values(array_diff($fields, ["Name"]));

$items = MyTableQuery::create()
    ->select(array_keys($fields))
    ->find();

如果您经常需要这样做,可以轻松地将其转换为功能:

function exclude_fields($class, $exclude) {
    $tableMap = $class::TABLE_MAP;
    $fields = $tableMap::getFieldNames("phpName");
    return array_values(array_diff($fields, $exclude));
}

$items = MyTableQuery::create()
    ->select(exclude_fields(MyTable::class, ["Name"]))
    ->find();