Cakephp: может Model-> find ('all') вернуть результаты без имени модели

Использование Model-> find ('all') возвращает массив со следующей структурой:

array(
  0 => array('Model1' => array(/* Model1 fields*/), 'Model2' => array(/* Model2 fields*/), ...),
  1 => array('Model1' => array(/* Model1 fields*/), 'Model2' => array(/* Model2 fields*/), ...),
  ...)

Когда запрашивается одна модель (то есть Recursive = -1), можно ли вернуть результаты в виде массива со следующей структурой:

array(0 => /* Model1 fields*/, 1 => /* Model1 fields*/, etc...)

Мне показалось, что я читаю это где-то некоторое время назад, но не могу понять, как это сделать или если это возможно.

php,cakephp,

2

Ответов: 3


1 принят

Вы также можете изменить метод aftersave этой модели, чтобы он возвращал $ data ['Modelname'] после выполнения запроса ... По сути, это было бы главным образом смещением массива, и у вас было бы только $ arrayname ['fieldname'] а не $ arrayname ['Model'] ['fieldname']. Это то, о чем вы спрашивали?


2

Как насчет этого ? работает в php 5.4+

$result = array_map( function ($elem) {
        return $elem['YourModelName'] ;
    } ,$this->Tagcloud-> find('all')
);

Для более старых версий php вам нужно повторить выбор после получения результатов


1

Может быть, вы думаете о связанных моделях, которые могут быть возвращены таким образом? Результаты запроса AFAIK Cake довольно стандартизированы, и это хорошо.

array(
    0 => array(
        'Model' => array(
            'id',
            'field1',
            ...
         ),
        'belongsTo/hasOneModel' => array(
            'id',
            'field1',
            ...
         )
        'habtm/hasManyModel' => array(
            0 => array(
                'id',
                'field1',
                ...
            ),
            1 => array(
                ...
            )
        )
    ),
    1 => array(
        'Model' => array(
            ...
        ),
        ...
    )
)

Как вы можете видеть, связанные модели HABTM или hasMany возвращаются в «плоском» массиве, но первичная модель всегда должна содержать название модели.

PHP, CakePHP,