2016-07-14 7 views
2

Model::find()というレスポンスを使用すると、モデルのResultsetが返されますが、返される列を制限するためにcolumnsパラメータを追加すると、レスポンスはRowsです。モデルのメソッドを呼び出すことが、私はできますPhalcon find with columnsパラメータではなく、モデルを返します

// Resultset of Models 
$users = \Models\Users\Users::find(); 

// Resultset of Rows 
$users = \Models\Users\Users::find([ 
     'columns' => 'id, email' 
]); 

例。 :: find()メソッドで列の制限を持つモデルのResultsetを持つ方法はありますか?

のFindFirst()はfind()メソッド、(返されるデータがある場合)を直接呼び出されるクラスのインスタンスを返しながら:Phalconのドキュメントは言う以来、私はわからないんだけど、これはバグのように思えますPhalcon \ Mvc \ Model \ Resultset \ Simpleを返します。

columnsパラメータを使用する場合、このルールの例外はありません。

また、conditionorderbindなどのような他の:: find()のパラメータもうまく動作します(モデルが返されます)。

カルパルン1.3.4

+2

列を指定しますあなたの完全な 'User'モデル構造体を返すため、' Users'オブジェクトとして「認識」されることはありません。 – Timothy

答えて

3

これはバグではなく、予期される動作です。 の情報the docsを少し下にスクロールしてParametersテーブルに移動し、カラムの説明を読んでください。

モデルのメソッドやリレーションを使用する必要がある場合は、列を指定しないでください。しかし、あなたがより良いパフォーマンスの後でモデルの関係を必要としない場合は、Query Builderを使用する必要があります。

条件、注文e.t.cのようなfind()パラメータの残りの部分。モデルメソッドを使用する能力には影響しません。

findFirst()メソッドもfind()メソッドと同じように動作します。ここでは例:

ませ列指定:

News::findFirst(3); 

// Output 
Models\News Object 
(
... 

特定の列を選択する場合Phalconができないので、あなたは常にRows`の `ResultSetを取得します

News::findFirst([ 
    'columns' => 'id, created_at' 
]); 

// Output 
Phalcon\Mvc\Model\Row Object 
(
    [id] => 1 
    [created_at] => 2016-02-02 
) 
+1

'findFirst()'は基本的に 'find()'オブジェクトで 'getFirst()'を呼び出しています。 'find() - > getFirst()' – Timothy

+1

まさに目の保養で、 'findFirstByName( 'Timothy');'のような魔法のメソッドを使うこともできます: –

+0

これは期待された動作であり、かわった。これはオブジェクトであるため、引き続きプロパティにアクセスできます。 おそらく、魔法のゲッター/セッターを追加することができます。 – Juri

関連する問題