Quelle est la différence entre `joinField` et` joinTable` dans les collections?

8

Dans le fichier app/code/core/Mage/Eav/Model/Entity/Collection/Abstract.php, il y a une fonction nommée joinFieldet il y en a une autre joinTable.

Si les champs sont en fait des colonnes dans les tables plates, qu'est-ce que cela signifie de les joindre? Et dans quelles circonstances devrais-je utiliser à la joinTableplace? Peuvent-ils tous les deux être utilisés de manière interchangeable?

shampooing
la source

Réponses:

5

Les deux méthodes sont presque identiques, la différence est que joinField()ne sélectionne qu'une seule colonne dans la table jointe, tandis que vous pouvez spécifier un tableau de colonnes dans joinTable`.

Vous pouvez donc toujours utiliser joinTableau lieu de joinField. L'exemple

 joinField('country_name', 'directory/country_name', 'name', 'country_id=shipping_country', "{{table}}.language_code='en'", 'left')

est le même que

 joinTable('directory/country_name', 'country_id=shipping_country', ['country_name' => 'name'], "{{table}}.language_code='en'", 'left')

Mais joinField()ne doit pas être utilisé si vous avez besoin de plusieurs colonnes de la table jointe.

Fabian Schmengler
la source