Для того чтобы получить данные из двух таблиц, вам необходимо сделать JOIN запрос к базе данных, объединяя таблицу материалов с таблицей категорий. Пример такого запроса может выглядеть так:
SELECT f.*, c.category_name
FROM freeroll f
JOIN category c ON f.category_id = c.id
ORDER BY f.id
В этом запросе мы объединяем таблицы
freeroll и
category, используя условие ON
f.category_id = c.id, и выбираем все столбцы из таблицы
freeroll (*) и столбец
category_name из таблицы category. Этот запрос вернет результат, который содержит данные из обеих таблиц, а также связанные данные из таблицы
category для каждого материала.
Чтобы реализовать этот запрос в методе
read() вашей модели
Freeroll, вам необходимо изменить запрос в методе
read() на:
$query = "SELECT f.*, c.category_name
FROM " . $this->table_name . " f
JOIN category c ON f.category_id = c.id
ORDER BY f.id";
Затем, в цикле
while, вы можете добавить значение
category_name к массиву
$freeroll_item:
$freeroll_item = array(
"id" => $id,
"name_turnament" => $name_turnament,
"prize" => $prize,
"password" => $password,
"data" => $data,
"time" => $time,
"category_id" => $category_id,
"category_name" => $category_name,
"buyin" => $buyin,
"buyin_symbol" => html_entity_decode($buyin_symbol),
"prize_symbol" => html_entity_decode($prize_symbol)
);
Здесь мы добавляем значение
category_name к массиву
$freeroll_item, которое мы получили из таблицы category с помощью JOIN запроса.
Далее, в методе
read.php вы можете вызвать метод
read() вашей модели
Category, чтобы получить все записи из таблицы категорий, и сохранить результаты в массив
$category_arr. Это можно сделать следующим образом:
$category = new Category($db);
$category_stmt = $category->read();
$category_num = $category_stmt->rowCount();
$category_arr = array();
while ($category_row = $category_stmt->fetch(PDO::FETCH_ASSOC)) {
extract($category_row);
$category_item = array(
"id" => $id,
"category_name" => $category_name
);
array_push($category_arr, $category_item);
}
Затем, внутри цикла
while для каждого материала в
$freeroll_arr, вы можете перебрать массив
$category_arr, чтобы найти категорию с нужным
id, и добавить ее значение к массиву $freeroll_item:
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
extract($row);
$freeroll_item = array(
"id" => $id,
"name_turnament" => $name_turnament,
"prize" => $prize,
"password" => $password,
"data" => $data,
"time" => $time,
"category_id" => $category_id,
"buyin" => $buyin,
"buyin_symbol" => html_entity_decode($buyin_symbol),
"prize_symbol" => html_entity_decode($prize_symbol)
);
// Поиск категории с нужным id в массиве $category_arr
foreach ($category_arr as $category_item) {
if ($category_item['id'] == $category_id) {
$freeroll_item['category_name'] = $category_item['category_name'];
break;
}
}
array_push($freeroll_arr["freeroll"], $freeroll_item);
}
Здесь мы ищем категорию с нужным
id в массиве
$category_arr, и если находим, добавляем значение
category_name к массиву
$freeroll_item.
Теперь ваш метод
read() будет возвращать все записи из таблицы
freeroll, включая название категории для каждого материала.