2016-08-17 59 views
0

有人告诉我,数据库请求循环使(的foreach)是坏的,但我怎么可以做其他的方式申请:idiorm数据库请求

$k1 = ORM::for_table('k1')->find_many(); 
foreach($k1 as $k){ 
    $k2 = ORM::for_table('k2')->where('id', $k->id)->find_one(); 
    echo $k2->name; 
} 
+0

您应该使用[加入](http://idiorm.readthedocs.io/en/latest/querying.html#加入)为此。 –

回答

1

使用join您可以创建相同不使用循环查询。注释后

编辑:

<?php 
$results = ORM::for_table('k1') 
    ->select('k2.*') 
    ->join('k1_to_k2', array('k1.id', '=', 'k1_to_k2.k1_id')) 
    ->join('k2', array('k1.id', '=', 'k2.id')) 
    ->find_many(); 

foreach($results as $result){ 
    echo $result->name; 
} 

以前的答案:

<?php 
$results = ORM::for_table('k1') 
    ->select('k2.*') 
    ->join('k2', array('k1.id', '=', 'k2.id')) 
    ->find_many(); 

foreach($results as $result){ 
    echo $result->name; 
} 
+0

如果我使用3桌? '$ k1 = ORM :: for_tabe('k1') - > find_many(); ('ki_id',$ ki-> id) - > find_many();其中($ k1为$ k){0} ('id',$ item-> k2_id) - > find_one();其中('id',$ item-> k2_id) - >其中, } }' – aidron

+0

@aidron答案已更新。 –

+0

嗨@aidron如果这个或任何答案已经解决了你的问题,请点击复选标记考虑[接受它](http://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。 –