2017-12-15 5 views
0

hasManyToManyでモデルの読み込みに問題があります。Phalcon hasManyToManyデータの読み込みが遅い

class TvguideChannel extends Model{ 

public function initialize() { 
    $this->setSource('tvguide_channel'); 
    $this->setConnectionService('db'); 

    $this->hasManyToMany(
     'code', 
     __NAMESPACE__.'\Tvguide', 
     "ch_code", 
     'ch_code', 
     __NAMESPACE__.'\Chgrtv', 
     'ch_code', 
     ['alias' => 'tvguide'] 
    ); 
    //$this->hasMany('code', __NAMESPACE__.'\Chgrtv', 'ch_code', ['alias' => 'tvgg']); 
} 

    public function getSource() { 
    return 'tvguide_channel'; 
    } 
} 

表Tvguideが持っている複数のレコード(1kk +)が、TvguideChannel 228のレコード

私はテーブルTvguideChannelから出力レコードたい有する:

Iコードを有する

$data = TvguideChannel::find(); 

を私は5秒以上ロードページを取得します。 関係hasManyToManyですべてのレコードを正しく出力する方法は?

+0

で一つのパッケージとして配布

composer require phalcon/incubator 

https://github.com/phalcon/incubator/tree/master/Library/Phalcon/Mvc/Model

<?php use Phalcon\Mvc\Model\EagerLoading\Loader, Phalcon\Mvc\Model\EagerLoading\QueryBuilder; $robotsAndParts = Robot::with('Parts'); // Equivalent to: $robots = Robot::find(); foreach ($robots as $robot) { $robot->parts; // $robot->__get('parts') } // Or $robot = Robot::findFirst()->load('Parts'); // Equivalent to: $robot = Robot::findFirst(); $robots->parts; // $robot->__get('parts') // Because Robot::find() returns a resultset, so in that case this is solved with: $robots = Loader::fromResultset(Robot::find(), 'Parts'); # Equivalent to the second example // Multiple and nested relations can be used too $robots = Robot::with('Parts', 'Foo.Bar'); // And arguments can be passed to the find method $robots = Robot::with('Parts', 'Foo.Bar', ['limit' => 5]); // And constraints $robots = Robot::with( [ 'Parts', 'Foo.Bar' => function (QueryBuilder $builder) { // Limit Bar $builder->limit(5); } ], [ 'limit' => 5 ] ); 

あなたのテーブルがインデックス化されますか? – Timothy

+0

はい、もちろんです!! – Jajaja

+0

関連モデルは遅延ロードされています。あなたのコードがそれらを要求するまで、実際には問い合わせはされません。関係を設定しても、関係するすべてのレコードが引き出されるわけではありません。あなたがその関係を削除すると、ページの読み込み時間が短くなると私は驚いています。 'microtime()'に 'TvguideChannel :: find()'をラップして遅延が発生していないかどうか確認しましたか? – Pickle

答えて

関連する問題