0

idiORM クラスを使用して問題が発生しています。(ドキュメントはこちら: http://idiorm.readthedocs.org/en/latest/ )

元のクエリをさらに処理するために保持しながら、特定のクエリの数を取得しようとしているので、元のクエリを2番目の変数にコピーしただけですが、count()メソッドを実行するとすぐに、すべてが他の変数にコピーされるようです.

たとえば、クエリを作成し、返された ORM オブジェクトを変数に保存して、次の$ormResults ようにコピーします$copy

$ormResults = ORM::for_table('department')->where('company', '4');
$this->_orginalResults = $ormResults;

// Copy the ORM object into $copy
$copy = $ormResults;
$this->resultCount = $copy->count();

ここまでは正常に動作し、予想されるカウント結果は正しく に格納されてい$this->resultCountます。ただし、(今まで) 未使用の変数を var ダンプすると、まったく使用していないので困惑するプロパティ$this->_orginalResultsも含まれています。count()

protected '_resultColumns' => 
array
  0 => string 'COUNT(*) AS `count`' (length=19)

実行しようとすると問題が発生し$this->_originalResults->findMany();ます。これは、count()メソッドが ORM オブジェクトを返すためですか? 私が知る限り、PHPコードは上向きに移動しません..そうですか?

要約:

$test = ORM::forTable('departments')->where('company', '8');
$test2 = $test;
// Works
var_dump($test->count());

// Fails
var_dump($test2->findMany());

ただし、これは完全に正常に機能します。

$test = ORM::forTable('departments')->where('company', '8');
$test2 = ORM::forTable('departments')->where('company', '8');

var_dump($test->count());
var_dump($test2->findMany());

洞察/助けをいただければ幸いです。

4

1 に答える 1

2

わかりました、どうやらいくつかの静的変数がそれを台無しにしています。

オブジェクトをコピーするために使用cloneすると、完全に機能します。

$test = ORM::forTable('departments')->where('company', '8');
$test2 = clone $test;

 var_dump($test->count());
 var_dump($test2->findMany());

トリックはありますか

于 2013-06-02T14:10:21.157 に答える