Простое ORM в PHP MySQL обновляет объединенные таблицы - PullRequest
4 голосов
/ 25 февраля 2012

В настоящее время я пытаюсь написать простой ORM с PHP и mysql. Я хочу, чтобы класс orm мог работать с объединенными таблицами. Итак, вот моя проблема, следующий код показывает, как я сопоставляю данные, полученные в результате запроса, с массивом.

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 - это массив, содержащий данные, прочитанные из базы данных.

Моя конкретная проблема сейчас заключается в том, что когда я использую в своем запросе оператор соединения, эта функция просто переопределяет поля с тем же именем в моем массиве m_Data. Также, если я не сохраню имена таблиц, из которых поступают определенные данные полей, я позже не смогу обновить таблицы с помощью того же оператора соединения.

Т.Л., др. Мне нужно иметь возможность не только сохранять данные таблицы следующим образом: m_Data {'field_name' => 'value'}, но мне также нужно сохранять имя таблицы, из которой выбрано поле. Затем я мог бы сохранить данные, например, m_Data {'table_name.field_name' => 'value'}, что позволит мне позже сгенерировать запрос для успешного обновления объединенных таблиц.

Кажется, я не могу найти какую-либо информацию о том, как получить имя таблицы происхождения для каждого поля, которое я извлекаю из результата.

Если это невозможно с mysqli, я буду очень признателен, если вы укажете мне правильное направление.

дополнительная короткая постановка задачи: Мне нужно получить набор результатов и прочитать каждую строку отдельно. Для каждой строки мне нужна следующая информация для каждого выбранного поля: field_name, table_name, value.

Должен быть простой ответ на этот вопрос, но я, похоже, ищу неправильные ключевые слова, чтобы найти решение.

Надеюсь, я написал это достаточно понятно.

Ответы [ 2 ]

0 голосов
/ 26 февраля 2012

mysqli_result::fetch_fields имеет полезные вещи:

http://www.php.net/manual/en/mysqli-result.fetch-fields.php

  • таблица
  • orgtable
  • тип поля
  • и т. д.
0 голосов
/ 25 февраля 2012

Мне кажется, что вы должны хранить значения столбцов таблицы в объекте, поэтому, если у вас есть связанная таблица, значения столбцов будут храниться в отдельном объекте - и, следовательно, не будут мешать значениям в вашей основной таблице.

В общем случае вы можете работать с ORM следующим образом:

// Make joined query
$rows = ...

foreach($rows as $row)
{
    // $row just refers to the primary table
    echo $row->id;

    // You get a many:1 related table this way
    echo $row->getRelatedRow()->value;

    // You get a 1:many rows this way
    $rows = $row->getOtherRelatedRows();
}

В зависимости от того, как вы настроили параметры запроса, получение связанных данных может инициировать или не запускать дополнительные команды SELECT для получения необходимых данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...