Несколько общих списков одного и того же Bean Redbean

Если у меня есть bean-компонент "product" и bean-компонент "upload", и у меня есть два свойства:

$product->sharedImageList;
$product->sharedManualList;
$product->sharedVideoList; // just here for another property 
                           //relating to another bean elsewhere

Они оба используют bean-компонент «upload». Но я не могу их псевдоним. Могу ли я не использовать один и тот же компонент для двух общих списков? Я знаю, что у списка общих компонентов должно быть то же имя, что и у компонента, но fetchAs работает ниже...

$teacher = $c->fetchAs( 'person' )->teacher;

я пытался

$product->fetchAs('upload')->sharedImageList
//getting desperate now
$product->via('upload')->sharedImageList
$product->alias('upload')->sharedImageList

Вы можете использовать это, чтобы проверить мою проблему

<?php
include_once 'rb.php';

error_reporting( E_ALL );
R::addDatabase( "my_site", "mysql:host=127.0.0.1;dbname=my_db", "root", "", false );
R::selectDatabase( 'my_site' );

\R::nuke();

$images  = [
    ["id" => 1,'name'=>"image"],
    ["id" => 2,'name'=>"test image2"],
];
$manuals = [
    ["id" => 1,'name'=>"test1"],
    ["id" => 2,'name'=>"test manual2"],
];

$product = R::findOneOrDispense( 'product', ' id=? ', [1] );

$product->sharedImageList  = []; //empty / create new shared image list
$product->sharedManualList = []; //empty / create new shared manual list
$product->name             = "im a product"; // give product a name for giggles

foreach ($images as $object) {
    $upload                     = R::findOneOrDispense( 'upload', " id = ? ", [$object['id']] );
    $upload->name               = $object['name'];
    $product->sharedImageList[] = $upload;
}

foreach ($manuals as $object) {
    $upload                      = R::findOneOrDispense( 'upload', " id = ? ", [$object['id']] );
    $upload->name                = $object['name'];
    $product->sharedManualList[] = $upload;
}

$product = R::load( 'product', R::store( $product ) );

echo '<pre>';
echo "\n\n<b>// this should return 2 beans of images that were uploaded</b>\n";
echo json_encode( $product->sharedImageList, JSON_PRETTY_PRINT );


echo "\n\n<b>// this should return 2 beans of manuals that were uploaded</b>\n";
echo json_encode(  $product->sharedManualList, JSON_PRETTY_PRINT );


echo "\n\n<b>// this is the only way i can access the shared lists, which is the name of the (upload) bean</b>\n";
echo json_encode( $product->sharedUploadList, JSON_PRETTY_PRINT );
echo "\n\n\n";
echo json_encode($product,JSON_PRETTY_PRINT);

echo '</pre>';

person Jake Ihasz    schedule 10.11.2017    source источник
comment
просто мысли. Меня смущает этот код. Всякий раз, когда я вижу метод «раздать» в классе «redbeanphp», тогда 1) я предполагаю, что это fused model 2) я предполагаю, что «redbeanphp» выполняет его при использовании \R::dispense('bean');. Чтобы отладить это, я бы: создал bean-компонент отдельно, а затем добавил его в общие списки, проверяя каждый список по очереди. Затем я могу проверить, что происходит на каждом этапе.   -  person Ryan Vincent    schedule 10.11.2017
comment
Не могли бы вы установить полный код, минимальный пример, который я могу загрузить и запустить?   -  person Ryan Vincent    schedule 10.11.2017
comment
Я просто добавил код для вас   -  person Jake Ihasz    schedule 10.11.2017
comment
Я немного отредактировал его, чтобы показать отзыв   -  person Jake Ihasz    schedule 10.11.2017
comment
Вы можете включить отладку, чтобы увидеть, какой SQL генерируется и используется redbeanphp. Также проверяйте таблицы базы данных на каждом этапе. Это поможет вам увидеть, что происходит на самом деле,   -  person Ryan Vincent    schedule 12.11.2017
comment
Можете ли вы показать 1) Входные данные, которые вы используете. 2) Исходные компоненты в базе данных. 3) что должен содержать/ссылаться на каждый bean-компонент "product". 3) какие именно результаты вы ожидаете увидеть для каждого полученного продукта? Я могу настроить его, но мне нужно видеть, что вы предоставляете и что вы ожидаете в качестве результатов.   -  person Ryan Vincent    schedule 12.11.2017
comment
Весь код, который вам нужен, находится в блоке кода внизу моего поста... копировать›вставить›запустить   -  person Jake Ihasz    schedule 13.11.2017


Ответы (1)


redbean не поддерживает many to many отношения псевдонимов< /strong> между парой бобов !! (скажем, bean1 и bean2)

Обходной путь заключается в использовании специального bean-компонента (скажем, bean_m2m, представляющего «отношение m2m» и пару отношений «один ко многим» и «многие к одному», подобных этому.

bean1 - (one2manyRelation) - bean_m2m - (many2oneRelation) - bean2

Чтобы упростить запросы, вы можете использовать (aggr функции)[https://www.redbeanphp.com/index.php?p=/other_relations#aggr]

person Alberto Garay    schedule 18.04.2018
comment
Нет, это поддержка с версии 5.x. redbeanphp.com/index.php?p=/many_to_many - person maverabil; 30.06.2018