Могу ли я сделать несколько карт с Redbeanphp?
Я могу загрузить объект и его отношения только с запросом?
так что если у меня есть
select * from parent inner join child on parent.id = child.parent_id
Могу ли я получить и массив родительских бинов с информацией о ownChild только из этого запроса?
что-то вроде многократного отображения в dapper: https://github.com/StackExchange/dapper-dot-net
2 ответа
Да, ты можешь. Это задокументировано как " Найти несколько" в руководстве RedBean.
Пример с вашим запросом:
<?php
require 'rb.php'; // 4.2.4, for the record
R::setup();
// --- Fixtures ---
$parent = R::dispense('parent');
$parent->name = "Foo";
$child = R::dispense('child');
$child->name = "Bar";
$childId = R::store($child);
$parent->ownChildList[] = $child;
$parentId = R::store($parent);
// --- Multi Mapping ---
$beans = R::findMulti( 'parent,child', '
SELECT parent.*, child.* FROM parent
INNER JOIN child ON parent.id = child.parent_id
WHERE parent.id = ?
', [$parentId], [
[
'a' => 'parent',
'b' => 'child',
'matcher' => function($parent, $c) {
return $parent->id == $c->parent_id;
},
'do' => function($p, $c) {
$p->noLoad()->ownChildList[$c->id] = $c;
}
]
]);
// Ensure we don't get lazily loaded results...
R::nuke();
echo $beans['parent'][$parentId]->ownChildList[$childId]->name, "\n";
Выходы:
Bar
Мы выигрываем.
$parent = R::dispense('parent');
$parent->name = "darth";
$child = R::dispense('child');
$child->name = "Luke";
$parent->ownChildList[] = $child;
$parent_id = R::store($parent);
// now fetch
$parent = R::load('parent' $parent_id);
echo "$parent has the following kids:";
foreach ($parent->ownChildList as $child){
echo $child->name . ", ";
}