2013-12-11 4 views
1

이것은 NotORM에서 처음 소개 한 것으로, 외래 키 데이터를 인쇄 할 수 없습니다. 여기 내 테이블은 다음과 같습니다NotORM 외래 키 데이터가 선택되지 않았습니다.

<?php 

require "NotORM.php"; 

$dsn = "mysql:dbname=budget;host=127.0.0.1"; 
$pdo = new PDO ($dsn, "root", "root"); 
$budgetdb = new NotORM ($pdo); 
?> 

코드는 레코드를 나열하지만, ​​예산 정보 항목을 인쇄되지 않은 :

**userinfo** 
id , int (primary key, autoincrement) 
username , varchar(50) 
gender , varchar(6) 
password , varchar(50) 

**budgetinfo** 
entryid , int (primary key, autoincrement) 
userid int references userinfo(id) 
amount , varchar(50) 
entrydate , varchar(6) 

가 여기 내 NotORM 코드입니다.

어디로 잘못 갔습니까?

<br/><br/> 
<hr/> 
Listing records, userinfo(id) => pk , budgetinfo(userid) => fk 
<hr/> 

<?php 
$userinfos = $budgetdb->userinfo(); 

if(isset($userinfos) && count($userinfos)>0){ 
    foreach ($userinfos as $userinfo) { 
     echo $userinfo ["username"] . " " . $userinfo ["gender"] . "<br/>"; 

     $budgets = $userinfo->budgetinfo(); 

     if(isset($budgets) && count($budgets)>0){ 
      foreach ($budgets as $budget) 
       echo $budget->budgetinfo["amount"] . " , " . $budget->budgetinfo["entrydate"] . "<br/>"; 
     } 
     else 
      echo "No budgets set..."; 

     echo "<br/>-------------------------------<br/>"; 
    } 
} 
else 
    echo "No record found..."; 
?> 

답변

1

실제 문제는 테이블의 primary_id가 NotorM 표준 규칙과 일치하지 않는 것 같습니다. 이 문제를 해결하는 가장 쉬운 방법은 budgetinfoentryidid으로 변경하고 useriduser_id으로 변경하는 것입니다. 이렇게하면 NotorM의 관계를 암시하는 방법을 준수하게됩니다.

MySQL에 정의 된 관계가있는 경우 자동 검색 기능을 사용하여 관계 구조를 얻을 수 있습니다.

$structure = new NotORM_Structure_Discovery($pdo, $cache = null, $foreign = '%s'); 

new NotORM($pdo)를 선언, $structure에 대한 추가 인수를 추가합니다.

MySQL에 정의 된 관계가 없다면, http://www.notorm.com/#identifiers을 방문하면 도움이 될 것입니다. 해당 지역을 살펴보십시오.

class UserStructure extends NotORM_Structure_Convention { 
    function getReferencedTable($name, $table) { 
     if ($name == "created_by" || $name == "modified_by") { 
      return "user"; 
     } 
     return parent::getReferencedTable($name, $table); 
    } 
} 

$structure = new UserStructure;