Как игнорировать поля при получении результатов с помощью Propel? - PullRequest
0 голосов
/ 03 апреля 2012

Мне нужно игнорировать поля вместо полей выбора в данных выборки или отменить выбор полей.

Это возможно? Если да, то как?

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Что касается документации, это невозможно: 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();
}
0 голосов
/ 09 июля 2018

Для 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();
...