2010-11-19 23 views
3

J'ai un problème avec le schéma Drupal 7 pour le module. Il y a 4 tables mais pour l'exemple 2 suffira:Clés étrangères dans un problème de schéma Drupal 7

function mymodule_schema() { 
$schema['series'] = array(
    'fields' => array(
     'id' => array(
      'type' => 'serial', 
      'unsigned' => true, 
      'not null' => true, 
     ), 
     'name' => array(
      'type' => 'varchar', 
      'length' => 255, 
      'not null' => true, 
     ), 
    ), 
    'unique keys' => array(
     'name' => array('name'), 
    ), 
    'primary key' => array('id'), 
); 

$schema['sermon'] = array(
    'fields' => array(
     'id' => array(
      'type' => 'serial', 
      'unsigned' => true, 
      'not null' => true, 
     ), 
     'title' => array(
      'type' => 'varchar', 
      'length' => 255, 
      'not null' => true, 
     ), 
     'series_id' => array(
      'type' => 'int', 
     ), 
    ), 
    'foreign keys' => array(
     'series_id' => array(
      'table' => 'series', 
      'columns' => array('series_id' => 'id'), 
     ), 
    ), 
    'primary key' => array('id'), 
); 
return $schema; 
} 

Ce code crée des tables mais pas des clés étrangères. Exemple de mise en œuvre que je reçois de Drupal.org: http://drupal.org/node/146939

la version Drupal est 7.0 bêta 3 ..As idée: peut-être, il n'est pas encore mis en œuvre, je ne le vois pas dans le tableau node (documentation point d'exemple pour coder de son installateur).

Merci pour votre aide.

+0

La seule chose que je peux penser est que peut-être 'id' ne peuvent pas être identifiés de manière unique dans la requête. Vous pouvez remplacer sermon.id par 'sermon_id' et series.id par' series_id' ou par quelque chose. Maintenant vous m'avez curieux, faites le moi savoir ça fonctionne! :) –

+0

zourtney, je vais essayer hier (c'est la nuit pour moi maintenant), mais même si c'est un problème (étrange, table + fieldname devrait être suffisant et instruction SQL brute faire ce travail correct) J'ai besoin de solution pour corriger ce nom parce que le schéma est fourni par un tiers et je ne pouvais tout simplement pas le changer en production. – lifecoder

+0

Ok, oublie cette idée; Je suppose que ce n'est pas encore implémenté Drupal. J'ai fait un post ci-dessous. Je me souviens avoir moi-même été confronté à ce problème il y a quelque temps. Il me semble que je me suis mal souvenu de la "solution". –

Répondre

5

Selon this post, il y a quelques mois, la fonction hook_schema n'implémente pas la création de clés étrangères. Il peut, cependant, faire référence à ceux qui existent déjà. Peut-être une solution de rechange serait d'exécuter le SQL d'ajout de clé étrangère dans hook_init (ou l'une des autres méthodes API). Désolé, il ne semble pas y avoir de meilleure solution pour le moment.

2

Vous avez la bonne idée, ce n'est pas encore mis en œuvre:/

Je ne sais pas pourquoi ils ne déclarent pas en bonne place, mais apparemment, les déclarations clés étrangères sont à des fins de documentation uniquement au moment (et une préparation à faire quelque chose d'utile avec eux plus tard, au moins on l'espère).

Voir this comment and below sur le thread (mal nommé) 'add foreign keys to core'.

0

c'est un poste très vieux, mais pour référence cela peut aider

'foreign keys' => array(
    'series_id' => array(
     'table' => 'series', 
     'columns' => array('id' => 'series_id'), 
    ), 
),