11

CakePHP の find メソッドによって返される結果配列の冗長なモデル名を取り除こうとしています。今のように、$results = $this->Model->find('all') のようなことをするとしたら、$results ではなく $results[Model][fieldName] で結果フィールドにアクセスする必要があります。 [フィールド名]。

配列にモデル名を含めると利点があることは理解していますが、API を構築しようとしているため、配列を json エンコードする必要があります。モデル名が含まれていると、次のような恐ろしいものが得られます。

[{"Model":{"field":"blah","field":"blah"}},{"Model":{"field":"blah","field":"blah"}}]

次のようなもっとエレガントなものが欲しい:

[{"field":"blah","field":"blah"},{"field":"blah","field":"blah"}]

何か案は?

4

2 に答える 2

20

コントローラーで、検索結果をシリアル化する代わりに、レベルをより深くシリアル化します。

CakePHP 2 の場合:

$things = $this->Thing->find('all');
$things = Set::extract('/Thing/.', $things);

これで、JSON の余分なレベルが結果から解放されます。

それを行う代替の長い方法はfor loop、結果を調べることです。

foreach ($things as $k => &$v) {
    $v = $v['Thing']
}

その後、$things は余分なレベルのキーを削除します。

于 2012-08-09T04:26:29.697 に答える
2

それ以降のバージョンの Cake では、 $things = Set::extract($things, '{n}.Thing'); を使用します。

于 2013-08-07T14:50:38.783 に答える