私は現在phpとmysqlで簡単なORMを書こうとしています。私はormクラスが結合されたテーブルで作業できるようにします。 これは私の問題です。次のコードは、クエリが生成するデータを配列にマップする方法を示しています。PHPでの単純なORM MySQLの更新でテーブルが結合されました
public function execute_query($db_connection)
{
$query = '';
foreach($this->sql_query as $query_part)
$query .= $query_part;
$result = $db_connection->query($query);
while($row = $result->fetch_assoc())
{
array_push($this->m_Data, $row);
}
}
db_connectionはmysqliオブジェクトです。 sql_queryには、すべての異なるクエリ部分が含まれています(例:sql_query ['join']など)。 m_Dataは、dbから読み取られたデータを含む配列です。
私の特定の問題は、私のクエリでjoinステートメントを使用しているときです。この関数は、m_Data配列内の同じ名前のフィールドをオーバーライドします。また、特定のフィールドのデータが来ているテーブルの名前を保存しないと、後で同じ結合ステートメントでテーブルを更新できません。
tl、dr。私はこのようにテーブルのデータを保存するだけでなく、m_Data {'field_name' => 'value'}でもテーブルの名前を保存する必要があります。私はその後、このm_Data {'table_name.field_name' => 'value'}のようなデータを保存して、後で結合テーブルを正常に更新するためのクエリを生成することができました。
私は、結果を引き出す各フィールドの元テーブル名を取得する方法に関する情報を見つけることができないようです。
mysqliで可能なら、正しい方向に私を指摘すれば嬉しいです。
余計な問題文: 結果セットを取得し、各行を別々に読み取る必要があります。各行に対して、選択されたすべてのフィールドについて、field_name、table_name、valueという情報が必要です。
これには簡単な答えが必要ですが、解決策を見つけるために間違ったキーワードを探しているようです。
事前にお問い合わせいただきありがとうございます。私はこれを十分に理解していただきたいと思います。
私は答えを追加しましたが、それはあるかもしれませんあなたがイントネーションしているかどうかを明確にしたい場合に便利ですdを使用すると、Propelのようなビルドプロセスから、またはDB構造をリアルタイムでクエリすることで、テーブルごとに列名を保持できます。 – halfer
ちなみに、私はあなたが経験のためにこれをやっていることを願っています! PHP用の新しいORMを書いているのであれば、そこに*たくさんの*があることに気をつけてください。ホイールを再開発していないことを確認してください:) – halfer
はい私は経験のためだけです。私は今かなりの時間phpで作業をしていませんでしたが、私はOOスタイルで使ったことはありません。だから、私は現在、単純なMVCフレームワークとこのORMを構築して問題に取り組んでいます。私は、プロジェクトに飛び込んで、私が直面している問題を克服することで最高の学習をしています。もう一度あなたの助けに感謝:) – wacki