我有两个表,table1
和table2
,通过多对多连接。
到目前为止没有任何问题,但我会因为生产性使用中的代码而使服务器崩溃。
访问多对多连接会产生很多查询。
是否有更好的方法来访问数据(没有原始查询)?
<?php
$table1_entry = R::findAll('table1');
foreach($table1_entry as $table1)
{
echo $table1->id;
foreach($table1->sharedTable2 as $table2)
{
echo $table2->id;
}
}
?>
string(34) "SELECT * FROM `table1` -- keep-cache"
[1] =>
string(71) "SELECT * FROM `table2_table1` WHERE ( `table1_id` IN ( ?) ) -- keep-cache"
[2] =>
string(61) "SELECT * FROM `table2` WHERE ( `id` IN ( 1) ) -- keep-cache"
[3] =>
string(71) "SELECT * FROM `table2_table1` WHERE ( `table1_id` IN ( ?) ) -- keep-cache"
[4] =>
string(61) "SELECT * FROM `table2` WHERE ( `id` IN ( 2) ) -- keep-cache"
[5] =>
string(71) "SELECT * FROM `table2_table1` WHERE ( `table1_id` IN ( ?) ) -- keep-cache"
[6] =>
string(61) "SELECT * FROM `table2` WHERE ( `id` IN ( 3) ) -- keep-cache"
[7] =>
string(71) "SELECT * FROM `table2_table1` WHERE ( `table1_id` IN ( ?) ) -- keep-cache"
[8] =>
string(61) "SELECT * FROM `table2` WHERE ( `id` IN ( 4) ) -- keep-cache"
[...]
答案 0 :(得分:1)
解决方案:
//Create some pages and ads
list($ad1, $ad2) = R::dispense('ad', 2);
list($page1, $page2, $page3) = R::dispense('page',3);
$ad1->sharedPage = array($page1, $page2);
$ad2->sharedPage[] = $page3;
R::storeAll(array($ad1, $ad2));
//to check
R::debug(1);
//Now given the ads
R::each(R::find('ad'), 'sharedPage|page',function($ad, $pages){
foreach($pages as $page) echo "\n AD {$ad->id} -> PAGE {$page->id} ";
});
请注意,在RedBeanPHP中,您必须使用
'sharedPage'=>'page'
而不是
'sharedPage|page'):
更多细节可以在这里找到: