2009-10-21 4 views
0

PHP를 많이 검색했지만 테이블 관계를 PHP에서 일대일, 일대 다 vs와 같이 덤프하는 방법을 찾지 못했습니다.PHP에서 mysql 테이블 관계를 덤프하는 방법

PHP에서이 문제를 처리 할 수있는 방법이 있습니까?

결과는 다음과 같을 수 있습니다

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

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


    ...   
) 

어떤 제안이 많이 감사합니다.

+0

은 내가 ORM에 대한 코드 점화 및 Datamapper를 사용하고, 나는 간단한 CRUD를 만드는 오전 – whoi

답변

0

DESCRIBE 명령의 출력을 구문 분석하여 직접해야합니다. doctrine과 같은 ORM을 사용하는 것이 좋습니다. You tell doctrine to make a one to one relation을 테이블 a와 테이블 b에 놓고 나머지는 처리합니다.

+0

.. 열이 다른 테이블에 대한 참조하지만 관계를 확인하기에 충분하지 않은에 대한 메타 정보를 포함 'TABLENAME을 설명'발견 이 관계를 필요로하는 발전기. 아래 답변에 tmp 솔루션을 찾았습니다. – whoi

2

http://dev.mysql.com/doc/refman/5.0/en/show-table-status.html에 정규식으로 테이블 정보를 구문 분석하는 스크립트가 있습니다. 나는 작동하도록 코드를 조작했다. 여기 코드가 있습니다.

<?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 

} 


?> 
관련 문제