У меня есть эта структура таблицы базы данных для сообщений, категорий и post_categories
сообщений:
| id | title | details
| 1 | test | test details
категорий:
| id | name | parent_id
| 1 | cat one | 0
| 2 | cat two | 0
| 3 | cat three | 0
post_categories
| category_id | post_id
| 1 | 1
| 2 | 1
Я вставляю несколько категорий, используя флажок ввода для каждого сообщения в таблице post_categories
. Теперь на странице обновления (domain.com/admin/posts/1/edit
) мне нужно показать список категорий и проверить флажок ввода. Могу ли я сгенерировать этот вывод, используя объединение двух таблиц (categories and post_categories
) Или мне нужно разделить два запроса (первый из таблицы post_category
и второй из categories
таблицы) как этот вывод ?! (мой выбор - метод соединения, так как генерировать использовать метод соединения?)
<input type="checkbox" value="1" checked> cat one
<input type="checkbox" value="2" checked> cat two
<input type="checkbox" value="3"> cat three //unchecked (not in post_categories table)
обновление: для запроса списка категорий:
$query = $this->db->table('categories')
->select('id, name, parent_id')
->get()
->getResultObject();
данные в print_r:
Array
(
[0] => stdClass Object
(
[id] => 1
[name] => cat one
[parent_id] => 0
)
[1] => stdClass Object
(
[id] => 2
[name] => cat two
[parent_id] => 0
)
[2] => stdClass Object
(
[id] => 3
[name] => cat three
[parent_id] => 0
)
[3] => stdClass Object
(
[id] => 4
[name] => cat4
[parent_id] => 2
)
[4] => stdClass Object
(
[id] => 5
[name] => cat5
[parent_id] => 0
)
[5] => stdClass Object
(
[id] => 6
[name] => cat6
[parent_id] => 0
)
)
после объединения:
$query = $this->db->table('categories')
->select('id, name, parent_id')
->join('post_categories', 'post_categories.category_id = id','left outer')
->where('post_categories.post_id', $id)
->get()
->getResultObject();
и данные:
Array
(
[0] => stdClass Object
(
[id] => 1
[name] => cat one
[parent_id] => 0
)
[1] => stdClass Object
(
[id] => 4
[name] => cat two
[parent_id] => 2
)
)
результат после объединения равен false.