2009-10-21 6 views
0

J'ai beaucoup cherché, mais je n'ai pas trouvé de moyen de vider les relations de table comme un par un, un à plusieurs vs en PHP.Comment faire pour vider les relations de table mysql en PHP

Existe-t-il un moyen de gérer ce problème en PHP?

Un résultat pourrait être:

array(
    'tableA' => array(
       'one-to-one' => array('tableB', 'tableC'), 
       'one-to-many' => array('tableD'), 

    'tableB' => array(
       'one-to-one' => array('tableA') 


    ...   
) 

Toutes les suggestions sont très appréciés.

+0

Je trouve « Décrire tablename » qui contient méta informations sur les colonnes qui sont des références à d'autres tables, mais ne suffit pas pour déterminer les relations .. – whoi

Répondre

0

Vous devez le faire vous-même en analysant la sortie de la commande DESCRIBE. Vous pourriez envisager d'utiliser un ORM comme doctrine. You tell doctrine to make a one to one relation sur la table a et la table b et il gère le reste.

+0

J'utilise CodeIgniter et DataMapper pour ORM, et je suis en train de créer simple CRUD générateur qui a besoin de ces relations. J'ai trouvé une solution tmp qui est en dessous de la réponse – whoi

2

J'ai trouvé un script au http://dev.mysql.com/doc/refman/5.0/en/show-table-status.html qui décrit les informations de la table d'analyse avec regex. J'avais manipulé le code pour travailler. voici le code.

<?php 
$conn = mysql_connect('localhost', 'user', 'pass'); 
if (!$conn) { 
    die('Could not connect: ' . mysql_error()); 
} 

//DB connection already established 
mysql_query("use db"); 
$res = mysql_query("SHOW CREATE TABLE tbl"); 
$row = mysql_fetch_assoc($res); 
mysql_free_result($res); 

//Only work on InnoDB foreign key info. 
if(preg_match_all(
     '/FOREIGN KEY \(`(.*)`\) REFERENCES `(.*)` \(`(.*)`\)/', 
     $row['Create Table'], 
     $matchArr)) { 
    print_r($matchArr); //which writes down the result 

} 


?> 
Questions connexes