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

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

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


person navid_gh    schedule 03.04.2012    source источник


Ответы (2)


Что касается документации, это невозможно: 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();
}
person j0k    schedule 03.04.2012

Для 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();
person Oli414    schedule 09.07.2018