3

私は Yii で遊んでいて、Yii Eager Loading遅延読み込みデータベース クエリで問題が発生しています。たとえば、次の 2 つの方法を比較します。

  1. $comment = Comment::model()->with(array('issue'=>array('condition'=>'project_ id='.$projectId)))->findAll();

  2. 2a.$comment = Comment::model()->findAll

2b. 問題を取得するには:

$issue = $comment->issues(コメントモデルで「問題」関係を宣言していると仮定します)。

最初のアプローチの利点がわかりません。私が理解しているように、最初のコードはコメントのみを返しますが、get Issue クエリも実行します (2b コードのように)。ただし、最初のコードでコメントの問題を取得したい場合は、(「Eager Loading」を利用するより良い方法があるかどうかはわかりませんが) ご覧のとおり、次のコードも実行する必要があります。

3.

$comment ->issues

もしそうなら、私がゲストとして、イーガーローディングアプローチで2つのクエリを実行する必要があるため、「遅延ロード」よりも時間がかかります. 、2 回目は 3 番目のコードを実行します)。

それで、私のことを確認できますか、それが間違っている場合は、その効率を利用する Eager Loading アプローチからすべての問題を取得する方法を教えてください。

4

1 に答える 1

3

積極的/遅延読み込みに関する問題は、必要なコード行数ではなく、必要なリソース数です。最初の例のように、積極的な読み込みを使用すると、コメントに関連付けられている「issue」テーブルのすべての要素が読み込まれます。それらは取得されてメモリに保存され、すぐに使用できるようになります。実際に使用すると($comment ->issues)、データベースからではなく、メモリキャッシュからロードされます。最初の「大きな」クエリは1つだけ実行されます。ただし、関連付けられているレコードが多すぎてほとんど使用しない場合は、参照しない限りデータベースからレコードが読み込まれないため、遅延読み込みが最適なオプションです。したがって、レコードを参照すると、クエリが実行されます。そして、それが物語の流れです。だから...熱心な読み込みまたは遅延読み込み、それが問題です。:

于 2012-08-09T03:19:35.260 に答える