再帰に頼らないCakePHPモデルの関係

cakephp model
再帰に頼らないCakePHPモデルの関係

私はcakePHPを初めて使用し、すべてのモデルを正しくリンクさせるのに問題があります。

これは、cakePHPでの私のモデルのレイアウトです。

クラスbelongsTo場所+クラスbelongsTo ClassType +クラスhasMany ScheduledClass + ScheduledClass belongsToインストラクター

私の問題は、使用するときです:

$this->Class->find('all')

Class、Location、ClassType、ScheduledClassモデルからのみデータを取得します。 インストラクターモデルからデータを取得しません。

再帰値を「2」に設定し、インストラクターモデルからデータを取得できますが、これにより、「ScheduledClass.instructor_id = Instructor.id」での結合ではなく、膨大な量のクエリ(行ごとに1つ)が生成されます。

私が達成したいと思っていたのは次のようなものです:

SELECT
...
...
FROM classes as Class
INNER JOIN locations as Location on Class.location_id = Location.id
INNER JOIN class_types as ClassType on Class.class_type_id = ClassType.id
INNER JOIN scheduled_classes as ScheduledClass on ScheduledClass.class_id = Class.id
INNER JOIN instructors as Instructor on ScheduledClass.instructor_id = Instructor.id

適切なデータを取得するためにContainableとJoinの両方を使用しようとしましたが、どちらかを使用することはできませんでした(おそらくそれらの使用法を誤解したため)。

前もって感謝します!

  0  0


ベストアンサー

Containableを使用して、検索がどのように反応し、必要なデータを取得するかを設定します。

モデルで

var $actsAs = array('Containable');

コントローラーでは次のようなことができます

$this->data = $this->User->find('first', array('conditions' => array('User.id' => $this->Auth->user('id')), 'contain' => array('City', 'Region', 'Country', 'UserOccupations', 'UserGroup')));

モデル/データベースの関係が正しく設定されている場合、必要な正確なデータを取得できます。取得する列を選択することもできます。

0


タイトルとURLをコピーしました