Могу ли я сделать несколько карт с 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 . ", ";
}
Другие вопросы по тегам