2016-08-17 3 views
0

мне сказали, что запрос базы данных сделать в цикле (Еогеасп) это плохо, но как я могу сделать другим способом этот запрос: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(); foreach ($ k1 as $ k) { $ con = ORM :: for_table (k1_to_k2) -> где ('ki_id', $ ki-> id) -> find_many(); foreach ($ con as $ item) { $ k2 = ORM :: for_table ('k2') -> где ('id', $ item-> k2_id) -> find_one(); } } ' – aidron

+0

@aidron ответ обновлен. –

+0

Привет @aidron если этот или любой ответ решил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/q/5234/179419), щелкнув галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Это не обязательно. –

Смежные вопросы