une toute petite question, mais qui me turlupine depuis longtemps et dont je ne trouve trace nulle part.
Depuis toujours, quand je déclare un nouvel objet et ses jointures, j'utilise la magie du copier-coller. Autrement dit : je ne comprends RIEN à ce que je fais.
J'aimerais donc que quelqu'un m'explique en détail la signification de chaque morceau. Je reporterai sur Programmer ensuite.
Quand on traduit en une phrase en français, ça veut dire quoi ?
Est-ce par exemple : "La table spip_auteurs est liée à la table
spip_trucs en permettant (AUTEURS){id_truc}" ?
et quelle est la différence entre les deux ?
// proposer une jointure entre les rubriques et les documents
$tables_jointures['spip_rubriques']= 'documents_liens';
// proposer une jointure entre articles et auteurs, en specifiant le
champ de la jointure
$tables_jointures['spip_articles']['id_auteur']= 'auteurs_articles';
(extraits de programmer_spip)
Pourquoi dans certains cas faudrait-il specifier le champ de jointure ?
est-ce que cela ne devrait pas être la règle ?
Est-ce que le premier cas est géré automatiquement sur les champs
homonymes ?
je m'y colle (il faut bien qu'il y en ait un qui assume de dire des
bêtises...)[1]
Et si dans ma table spip_trucs, j'ai directement un champ 'id_auteur'
(pas dans un table de liaison donc) : ça n'a pas de sens de déclarer des
jointures dans ce cas ?
la jointure 'automagique' de spip se fera uniquement si :
- spip_trucs.id_auteur est déclaré comme clef primaire de spip_trucs
et
- aucun champ de spip_trucs n'est explicitement déclaré comme candidat
à une jointure dans $tables_principales['spip_trucs']['join']
Et si dans ma table spip_trucs, j'ai un champ 'id_auteur' qui référence
un auteur, ET un champ 'id_machin' qui référence AUSSI un auteur ?
Est-ce qu'il y a une manière de déclarer que 'id_machin' c'est un
id_auteur de la table spip_auteurs ?
là, il faut explicitement déclarer les champs spip_trucs.id_auteur et
spip_trucs.id_machin comme candidats à une jointure :
$tables_principales['spip_trucs']['join'] =
array("id_auteur" => "id_auteur",
"id_machin" => "id_auteur");
Dans le tableau de déclaration de la table, on déclare les champs, les
clés, et il parait qu'on peut ajouter ce troisième élément "join".
Que signifie exactement ces champs, et surtout séparément : que veut
dire la clé, que veut dire la valeur ?
pour analyser une boucle (les infos de l'objet Boucle) et construire la requête sql correspondante, le compilo se base sur les informations
descriptives qui lui sont donc fournies par ces array.
Est-ce que ça veut dire "Le champ 'id_truc' *de cette table* (la clé
dans ce tableau) référence le champ 'id_truc' autre part (la valeur dans
ce tableau)" ?
voilà. oui.
[1] cela dit, si vous pouviez éviter les oeufs pourris dans ce que vous
allez me lancer dessus... je supporte pas l'oeuf pourri.