dr.nomore
2.12.2013 - 07:57
$tree = $schema->tree->get(1);
Что за дерево? Я пытался найти годный код деревообразования и обломился. Написал group_concat() и забил.
Ваш классный класс может такое построить? group_concat() выдает строки, это плохо. Хорошо бы запросить соединение нескольких отношений и построить дерево по полученным данным.
Можете заменить дерево с фруктами на ящик с фруктами, может понятней станет.
вот такое дерево

с фруктами.
если быть точнее, то это из моих примеров дерево с ID=1 - яблоня с яблоками.
пишите конкретнее вопрос. тогда я конкретнее напишу как это реализовать с моим классом.
я так понял вам нужно из базы тянуть древовидную структуру, так вот что я скажу: реляционная БД не может выдать древовидную структуру, реляционная БД оперирует отношениями (попросту говоря - таблицами), вы сами это лучше меня знаете. Поэтому и мой класс этим не занимается. Если вам нужно хранить в БД древовидную структуру, то есть ряд способов проецирования древовидной структуры на реляционные отношения, так вот вы сами выбираете удобный способ проекции, подходящий под вашу конкретную задачу, наследуете класс таблицы из моей схемы и реализовываете в нем логику своей проекции, либо создаете вообще отдельный класс модели, который будет реализовывать проекцию на несколько таблиц.
Естественно я не в состоянии один реализовать все частные случаи под все нужды, и совершенно не стремлюсь к этому, но если вы на основе моих классов реализуете ряд частных случаев моделей, то я буду безмерно благодарен и включу их в проект.
вот еще пример, раз вас "деревья" смущают
$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;
}
}
}