-1

OOP PHP の学習の一環として、次のメソッドを含むデータベース オブジェクトを作成しました。

public static function find_by_sql($sql="") {
        global $database;
        $result_set = $database->query($sql);
        $object_array = array();
        while ($row = $database->fetch_array($result_set)) {
                $object_array[] = static::instantiate($row);
        }
        return $object_array;
}

これを使用して、単一のテーブルからデータを取得してアクセスできますが、結合されたテーブルで使用しようとすると、オブジェクトはプライマリテーブルからのデータのみを提供します。

$sql = "SELECT s.name, m.id, m.firstName, m.lastName, m.dob";  
    $sql .= " FROM members AS m";
    $sql .= " LEFT JOIN mbr_sections AS ms ON m.id = ms.member_id";
    $sql .= " LEFT JOIN sections AS s ON ms.section_id = s.id";
$sql .= " ORDER BY s.organisation ASC, s.name ASC, m.lastName ASC, m.firstName ASC";
$sql .= " LIMIT {$per_page} ";
$sql .= " OFFSET {$pagination->offset()}";
$members = Member::find_by_sql($sql);

上記のクエリを使用すると、次のコードは s.name フィールドに対して何も出力しませんが、メンバー テーブルのすべてのフィールドが正しく一覧表示されます。ORDER BY ステートメントが出力を正しくソートしているため、MySQL クエリがデータにアクセスしていることはわかっています。

  <?php foreach($members as $member): ?>
  <tr>
    <td><?php echo $member->name;?></td>
    <td><?php echo $member->full_name();?></td>
    <td><?php echo $member->getAge($member->dob);?></td>
    <td><a href="member_edit.php?id=<?php echo $member->id;?>">Edit</a></td>
    <td><a href="member_delete_confirm.php?id=<?php echo $member->id;?>">Delete</a></td>
  </tr>
  <?php endforeach; ?>

$members を print_r($members) で出力すると、members テーブルのデータのみが含まれます。他のテーブルから取得したデータにアクセスするにはどうすればよいですか?

ありがとう

4

1 に答える 1

0

ここでもそれらを選択する必要があります。

$sql = "SELECT s.name, m.id, m.firstName, m.lastName, m.dob";  
$sql .= " FROM members AS m";
$sql .= " LEFT JOIN mbr_sections AS ms ON m.id = ms.member_id";
$sql .= " LEFT JOIN sections AS s ON ms.section_id = s.id";
$sql .= " ORDER BY s.organisation ASC, s.name ASC, m.lastName ASC, m.firstName ASC";
$sql .= " LIMIT {$per_page} ";
$sql .= " OFFSET {$pagination->offset()}";
$members = Member::find_by_sql($sql);

name、id、firstName、lastName、および dob のみを選択しました。

次に例を示します。

$sql = "SELECT s.name, m.id, m.firstName, m.lastName, m.dob, mbr_sections.field_you_want, sections.*";  
于 2012-09-19T13:09:07.897 に答える