我需要在获取数据或反向选择字段中忽略字段而不是选择字段。
这可能吗?如果是,怎么样?
答案 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();