1

これが NotORM の初めての紹介で、foreignkey データを出力できません。ここに私のテーブルがあります:

**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コードです:

<?php

require "NotORM.php";

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

コードはレコードを一覧表示しますが、budgetinfo エントリを出力しませんでした。

どこで間違ったのですか?

<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...";
?>
4

1 に答える 1

1

実際の問題は、テーブルの primary_id が NotORM 標準の規則と一致しないことです。この問題を解決する最も簡単な方法は、単にを に変更し、 に変更することbudgetinfoです。このようにして、関係を示唆する NotORM の方法に準拠しました。entryididuseriduser_id

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;
于 2013-12-27T23:38:09.560 に答える