質問

3つのテーブルからすべてのデータを取得したい

users、properties、users_properties。

それで、manytomanyRowsetを使用することにしました。しかし、驚いたことに、私はプロパティおよびusers_propertiesテーブルからデータを取得しますが、usersテーブルからはデータを取得しません。何故ですか? usersテーブルのいくつかの列が必要です。manytomanyrowset関数に、現在のテーブルのデータも必要であることを伝える方法はありますか?

これは私の機能です

public function fetchRegisteredProperties()
{

    $userTable = $this->getTable();
    require_once APPLICATION_PATH . '/models/DbTable/UsersPropertiesDB.php';
    require_once APPLICATION_PATH . '/models/DbTable/PropertiesDB.php';

    $propertiesRowset = $table->fetchAll();
    $allProperties = array();

    foreach ($propertiesRowset as $row) {
        $propertiesRowset = $row->findManyToManyRowset(
          'Model_DbTable_Properties','Model_DbTable_UsersProperties');
        $allProperties = array_merge($tempArray,$propertiesRowset->toArray()); 
    }

    return $allProperties;
}

事前に感謝します

役に立ちましたか?

解決

Zend Frameworkのテーブル関係機能を設計およびコーディングしました。

質問に対する答えは「いいえ」です。 findManyToManyRowset()メソッドは関連テーブルから行をフェッチするだけで、対応するRowオブジェクトにマージしません。その理由は、ZFのRowオブジェクトはそれ自体を save()してデータベースに戻すことができ、フィールドを追加した場合、それらの処理方法がわからないからです。

したがって、ユーザーフィールドとユーザープロパティのコレクションの両方を保持するカスタムRowオブジェクトを実装する必要があります。ユーザープロパティをRowsetオブジェクトとして保存します。

次に __ get()および __ set()を拡張して、オブジェクトプロパティの読み取りまたは書き込み時にフィールドを正しい配列にマップする方法を認識できるようにします。つまり、ユーザー行の一部ではないフィールドを読み書きしようとすると、ユーザープロパティRowsetにフォールバックします。

save()も拡張して、現在の行を保存するだけでなく、ユーザープロパティの行セットで save()を呼び出します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top