で
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;
}
おかげで私の関数です。
あなたの質問に対する答えはいいえです。findManyToManyRowset()
メソッドは、関連するテーブルから行をフェッチするのみで、対応するRowオブジェクトにマージしません。その理由は、ZFのRowオブジェクトがsave()
自身をデータベースに戻すことができ、フィールドを追加した場合、そのオブジェクトとの関係を知ることができないためです。
したがって、ユーザーフィールドとユーザープロパティのコレクションの両方を保持するカスタムRowオブジェクトを実装する必要があります。ユーザープロパティをRowsetオブジェクトとして格納します。
__get()
と__set()
を拡張して、オブジェクトのプロパティを読み書きするときにフィールドを正しい配列にマップする方法を知っているようにします。つまり、ユーザー行の一部ではないフィールドを読み書きしようとすると、ユーザープロパティの行セットに戻ります。
また、現在の行だけでなく、ユーザープロパティの行セットにsave()
も保存するようにsave()
を拡張します。
あなたに誇り! – xenon
ああ、大丈夫です。私はフレームワークをzendするのが初めてで、cakePhpが処理する方法に慣れていました。早速の対応、ありがとうございました! –