-1

私はPHPのOOPに非常に慣れていないので、これは今日の2回目の投稿です。それがばかげた質問である場合は、我慢してください...

「JOB」オブジェクトで使用できるようにする美しいクラスを作成しました。これには、この単一のオブジェクトを使用して多くのテーブルからデータをプルし、エンドユーザーが関連データを表示できるようにすることが含まれます。たとえば、私のクラスでは、次のようになっています。

public function showProjectManager() {
    $q = "SELECT m.name FROM " . jJOBS . " AS j JOIN " . jMEI . " AS m ON m.uid = j.mei WHERE id = " . $this->id;
    $r = $this->_dblink->query($q);
    $row = $r->fetch_assoc();
    return $row['name'];
}

jJOBSテーブルに格納されているデータは、別のテーブルのIDを参照する単なる数値であるためです。メインのjJOBSテーブルには、このようなデータがいくつか保存されています。

したがって、コードの別のセクションには、ユーザーが特定の「JOB」を選択できるドロップダウンボックスがあり、AJAX呼び出しを使用してそのJOBからのデータを表示したいと思います。私がやろうとしているのは、JOBオブジェクト(showProjectManagerメソッドを含む)を作成し、mysqli_fetch_objectを使用してデータベースからすべてのプロパティを読み取り、次に次のようにshowProjectManagerメソッドを呼び出すことです。

    $disp = new Job();
    $q = "SELECT * FROM " . jJOBS . " WHERE id = " . $job_id;
    $r = $jobsdb->query($q);
    $disp = $r->fetch_object();
    $zList .= "<li><span class='smLabels l'>Project Manager :</span>\n<span class='smText r'>" . $disp->showProjectManager() . "</span></li>";

しかし、DBからオブジェクトをフェッチするたびに、$dispオブジェクトはstdClassに戻ります。適切なクラスを維持し、DBから必要な値にアクセスするにはどうすればよいですか?私がこのテーマについて読んだことはすべて、特にこのシナリオでは、信じられないほど複雑に見えるDataMapperの使用を求めています。

4

2 に答える 2

1

fetch_object最も簡単な方法は、次のようにクラス名を に渡すことです。

$q = "SELECT * FROM " . jJOBS . " WHERE id = " . $job_id;
$r = $jobsdb->query($q);
$disp = $r->fetch_object("Job");

ドキュメントによると、これはすべてのフィールドが入力された$dispタイプのオブジェクトとして作成され、コンストラクターが呼び出されます。JobJob

于 2012-10-31T00:52:33.990 に答える
0

$disp 変数をリセットしています。ジョブ オブジェクトにジョブを設定する必要があります。このようにidをコンストラクタに渡します。

class Job {
    private $job = null;

    function __construct($id = null) {
        if(isset($id)) {
            $q = "SELECT * FROM " . jJOBS . " WHERE id = " . $job_id;
            $r = $jobsdb->query($q);
            $job = $r->fetch_object();
            $this->job = $job;
        }
    }

    function getJob() {
        return $this->job;
    }

    public function showProjectManager() {
        $q = "SELECT m.name FROM " . jJOBS . " AS j JOIN " . jMEI . " AS m ON m.uid = j.mei WHERE id = " . $this->job->id;
        $r = $jobsdb->query($q);
        $row = $r->fetch_object();
        return $row->name;
    }
}

?>

それで

$disp = new Job(123);
$disp->someJobObjectFunction();
于 2012-10-31T00:47:56.903 に答える