2010-07-20 12 views
0

J'ai des modèles de mes tables et je voudrais faire une jointure en utilisant un modèle plutôt qu'un tableau. Par exemple, au lieu de:Zend Join Models

$select = $this->select() 
->from(array('p' => 'products'), 
    array('product_id', 'product_name')) 
->join(array('l' => 'line_items'), 
    'p.product_id = l.product_id', 
->limit(20, 10); 

où je précise les noms des tables et colonnes que je veux rejoindre, puis-je pas utiliser mes modèles?

$select = $this->select() 
->from(array('p' => 'products'), 
    array('product_id', 'product_name')) 
->join(array('l' => Model_Table1::tableName()), 
    'p.product_id = l.product_id', 
->limit(20, 10); 
+0

En tant qu'interruption, je crée des instances des autres modèles et récupère les lignes si nécessaire. –

Répondre

1

Je ne vois pas pourquoi pas, si votre modèle a une variable statique avec le nom et une fonction statique pour retourner la variable:

protected static $table = 'dbname'; 
public static function tableName() { 
    return self::$table; 
} 

est-ce bien la peine? Le nom de la table va-t-il changer?

+0

Les modèles en question contrôlent deux tables (afin de maintenir la 6ème forme normale). Y compris une seule table n'est pas une option, et la jointure requise est compliquée. –

2

pas ... u cann't rejoindre deux modèles ... ceux-ci sont de classe qui peuvent être inclure .. si u ne peut utiliser ces classes dans le contrôleur ou peut inclure aussi dans un autre modèle ... selon à l'application ou exigence

0

Vous devez définir la vérification d'intégrité sur false. Comme ceci

$select = $this->select() 
->setIntegrityCheck(false) 
->from(array('p' => 'products'), 
    array('product_id', 'product_name')) 
->join(array('l' => 'line_items'), 
    'p.product_id = l.product_id', 
->limit(20, 10);