[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс работы с БД
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
dr.nomore
$tree = $schema->tree->get(1); # берем дерево


Что за дерево? Я пытался найти годный код деревообразования и обломился. Написал group_concat() и забил.

Ваш классный класс может такое построить? group_concat() выдает строки, это плохо. Хорошо бы запросить соединение нескольких отношений и построить дерево по полученным данным.
Aeq
Можете заменить дерево с фруктами на ящик с фруктами, может понятней станет.
Aeq
вот такое дерево
user posted image
с фруктами.
если быть точнее, то это из моих примеров дерево с ID=1 - яблоня с яблоками.
Aeq
пишите конкретнее вопрос. тогда я конкретнее напишу как это реализовать с моим классом.
я так понял вам нужно из базы тянуть древовидную структуру, так вот что я скажу: реляционная БД не может выдать древовидную структуру, реляционная БД оперирует отношениями (попросту говоря - таблицами), вы сами это лучше меня знаете. Поэтому и мой класс этим не занимается. Если вам нужно хранить в БД древовидную структуру, то есть ряд способов проецирования древовидной структуры на реляционные отношения, так вот вы сами выбираете удобный способ проекции, подходящий под вашу конкретную задачу, наследуете класс таблицы из моей схемы и реализовываете в нем логику своей проекции, либо создаете вообще отдельный класс модели, который будет реализовывать проекцию на несколько таблиц.
Естественно я не в состоянии один реализовать все частные случаи под все нужды, и совершенно не стремлюсь к этому, но если вы на основе моих классов реализуете ряд частных случаев моделей, то я буду безмерно благодарен и включу их в проект.
Aeq
вот еще пример, раз вас "деревья" смущают


# Берем начальника
$boss = $schema->boss
->get(123);

# Выбираем всех подчиненных сотрудников этого начальника
$employees = $schema->employee()
->
refs($boss)
->
fetchAll();

# Выбираем все связи с проектами в которых участвуют выбранные сотрудники
$employee_projects = $schema->employee_project()
->
refs($employees)
->
fetchAll();

# Выбираем все проекты соответствующие выбранным связям
$projects = $schema->project()
->
refs($employee_projects)
->
fetchAll();

# Выбираем все задачи в выбранных проектах, которые в данный момент выполняются
$tasks = $schema->task()
->
refs($projects)
->
key('in_progress', 'status')
->
fetchAll();

# В результате кроме полученных массивов объектов строк из разных табличек,
# все объекты строк еще и перелинкованы между собой в обе стороны
# соответствующим удобным образом и с работающим автокомплитом естессно.
# Следующий код покажет перелинковку:


echo $boss->name;
foreach ($boss->employee as $employee) {
echo $employee->name;
echo $employee->boss->name;
foreach ($employee->employee_project as $employee_project) {
$project = $employee_project->project;
echo $project->name;
foreach ($project->employee_project as $employee_project) {
$employee = $employee_project->employee;
echo $employee->name;
}
foreach ($project->task as $task) {
echo $task->name;
echo $task->project->name;
}
}
}


# Таким образом, в ваш любимый шаблонизатор достаточно передать объект $boss,
# все что нужно для рендера странички будет уже в нем.

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.