Мне нужно игнорировать поля вместо полей выбора в полях выборки или обратного выбора.
Это возможно? Если да, то как?
Мне нужно игнорировать поля вместо полей выбора в полях выборки или обратного выбора.
Это возможно? Если да, то как?
Что касается документации, это невозможно: 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();
}
Для 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();