1

2 つのモデルがオブジェクトとして返されZend_Db_Selectます。

次に、それらを結合して一度にデータを取得する必要があります。

class Model_User extends Abstract_Model { 
    public function sqlUser() { 
    return $this->select(array(
               'user_id', 'user.name', 'user.login', 'address.street', 'city.city_id', 'city.city_name','region.region_id', 'region.region_name'
            )) 
            ->joinUsing('address','address_id','') ->join('city', 'city.city_id = address.city_id', '')
            ->join('region', 'region.region_id = city.region_id', ''); 
    } 
} 

class Model_Technics extends Abstract_Model{ 
    public function sqlList() { 
        return $this->select()
                 // here some more sql
                 ->joinUsing('catalog_model','model_id',''); 
    }
}

次に、すべてのユーザーのすべての情報を含む sqlList を取得する必要があります。すべてのコードを複製したくありません。結合を介してユーザーモデルからSQLに結合したいだけです

4

1 に答える 1

0

zend_db_select (columns,from,joins,where) の「セクション」を反復して、それらを他のクエリに追加する方法を考え出すことはできますが、私はそれをお勧めしません。

別の方法として、結合先のモデルに「結合」メソッドを用意することもできます。これにより、選択したオブジェクトが取得され、結合メソッドが実行されます。もちろん、選択オブジェクトですでに使用可能なテーブルに依存します。または、そのメソッドは、結合モデルのテーブルに結合する方法を定義する構造を返すだけで、プライマリ モデルがそれをどうするかを決定できます。

解決策は山ほどありますが、2 つの zend_db_select オブジェクトを 2 つのオブジェクトの間に追加のロジックを追加せずに詰め込む簡単な方法はありません。 欠落している主な部分は、2 つのモデル間の関係情報です。

これが完全な答えではないことはわかっていますが(まだコメントできないため)、うまくいけば、使用できると思われるパスを示してくれます。

于 2012-09-05T19:14:46.930 に答える