ZF2の単純なデータベースクエリを理解するだけでよい。 ZF1では、次のような簡単な方法があります。Zend Framework 2 Db Adapter Adapterクエリ結果、ZF1のように
public function recordset()
{
// listing of all records
$db = Zend_Registry::get('db');
$sql = "SELECT " . $this->_selectlist() .
" from customer c";
$r = $db->fetchAll($sql);
return $r;
}
ZF2では、私はどのように同じことをしますか?私は以下を試しましたが、これは "結果"オブジェクトのように見えるだけですが、私が望むのはZF1のような配列です。後で反復処理する必要がある配列を後で提供するためにのみ結果オブジェクトを反復処理しなければならない場合、それはちょっとした労力の重複のように思えます。
はとにかく、ここで私はこれまでZF2に持っているものだ:出力で
//above the controller start I have: use Zend\Db\Adapter\Adapter as DbAdapter;
public function blaAction()
{
$db = new DbAdapter(
array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=mydb;host=localhost',
'username' => 'root',
'password' => '',
)
);
$sql = 'select * from customer';
$stmt = $db->query($sql);
$results = $stmt->execute();
$this->view->data = $results;
return $this->view;
}
、私はこれを取得:
object(Zend\Db\Adapter\Driver\Pdo\Result)#197 (8) {
["statementMode":protected]=> string(7) "forward" ["resource":protected]=> object(PDOStatement)#195 (1) {
["queryString"]=> string(22) "select * from customer"
} ["options":protected]=> NULL ["currentComplete":protected]=> bool(false) ["currentData":protected]=> NULL ["position":protected]=> int(-1) ["generatedValue":protected]=> string(1) "0" ["rowCount":protected]=> NULL
}
しかし、私は$results->count();
に$結果を変更した場合、私は実際に見ていますレコード数。配列としてデータにアクセスするにはどうすればよいですか? (完全なレコードセット)
ある時点で、私は何かを見ました:$results->current()
しかし、それは単一のレコードを返しただけです。
ちょっとしたメモです。私は使用できるテーブルの抽象クラスをすべて見ていますが、私の学習のこの時点では、そうしたくありません。 ZF1のように配列を返す単純なオンデマンドクエリがほしいだけです。 ZF2では、過度のように見える設定やものには、あまりにも多くの「配線」があるようです。しかし、フレームワークとして、私は柔軟性が欲しく、私がZF1で取り組んでいる主なアプリケーションは、ZF2のモジュール性から本当に恩恵を受ける可能性があります。 (そうでなければ、おそらく他のフレームワークと一緒に行くだろう)
私の無知を許してください、ありがとうございました!
Loあなたは 'Zend \ Db \ Adapter \ Driver \ Pdo \ Result'に' fetchAll'のようなメソッドを探しましたか?さもなければ、実行したPDOStatementと同じように '$ result'をループする必要があります。 – prodigitalson
ええ、私は文書を見て: [リンク] http://framework.zend.com/apidoc/2.0/classes/Zend.Db.Adapter.Driver.Pdo.Result.html [/リンク] しかし、その唯一の"current()"という配列を返す1つのメソッドを示します。そしてそれはただ一つのレコードを返します。あまりにも - > toArray()メソッドまたはそれに類するものがありません。 ZF2で抽象クラスを使わずにレコードセットを返す方法がないとは思えません。 – gregthegeek
よくこのレベルでは配列を必要としません...mysqliresult resrouceやPDOStatementのような実際の結果セットが必要なのは、あなたがループしているからです。 fetchAllを使用することは、通常は良い習慣ではありませんが、場合によっては便利です。おそらく '$ result-> getResource() - > fetchAll(PDO :: FETCH_ASSOC)'を実行して回避することができます。全体的なIDは2.xや1.xでZend_Dbを絶対に推奨しません...代わりにidはDoctrine -DDBALを使って、必要ならば抽象化や完全なORMを望みます。 – prodigitalson