0

だから、私はこのコードを持っています:

class ProductsController extends AppController {
var $name = 'Products';
var $paginate = array('limit' => 5);    // sets the number of entries per page  


function index() {      
    $this->Product->recursive = 0;
    // works up to here fine
    $this->set('products', $this->paginate());  // makes the browser hangs
    }
}

ブラウザにアクセスすると../products/index、ちょっとハングします。エラーメッセージを表示せずに数分間ロードを試み、Apache (XAMPP) を再起動するか、60 秒待つ必要があります。問題は$this->paginate()、製品コントローラーとのすべての関連付けにあるようです。2 つの gotTo (小さなテーブルに属する) と 1 つの hasOne (1 つの大きなテーブル、20K 以上の行) があります。

製品モデルに関係を追加しましたhasOneが、これがハングの原因になっているようです。この関係を削除すると、URL が機能し、すべてのアイテムが表示されます。ただし、このhasOne関係は、たとえば../products/view/1.

これを管理しやすくする方法について何か考えはありますか?

4

1 に答える 1

1

デバッグを開始するために確認できることがいくつかあります。最初はログです。SQL と PHP の両方のログで、スロー クエリとタイムアウト エラーをそれぞれ確認します。

Product モデルに多くの関連付けがある場合は、 を使用することをお勧めしContainableBehaviorます。実際には、常に$recurisve = -1;モデルを設定し、Containable を使用して関連付けを取得することをお勧めします。アプリを劇的に高速化します。ビューで使用しないデータをプルするのはなぜですか?

app_model で、次の動作を追加します。

class AppModel extends Model {

  var $recursive = -1;

  var $actsAs = array('Containable');
}

次に、検索クエリを変更して、必要な関連データを取得します。

$this->Product->find('all', array(
  'contain' => array
    'Category',
    'Type'
  )
));

カテゴリとタイプが製品に関連付けられている場所。これにより、Cake はその関連データをプルするように指示されます。

次に、クエリを見てください。DebugKitを使用すると、タイミングとスロー クエリを分析できます。

これらは、検索を高速化するための基本的な方法です。CakePHP アプリを最適化するための情報はたくさんありますが、これが問題のように思えます。

于 2012-04-16T20:53:25.413 に答える