Логика CakePHP - другие способы получить тот же результат

Я пытался решить эту проблему в течение нескольких дней. Пожалуйста, помогите или предложите другие методы, если это возможно. Я могу показать общий балл за 10 уроков для каждого студента в Chrome, Safari и Firefox. Тем не менее, я получил эту ошибку "эта страница не может быть отображена" в IE9/10.

Я устал отлаживать и обнаружил, что IE9 / 10 показывает вышеуказанную ошибку, когда я использую цикл for через requestAction. Сказав это, я бы потребовал, чтобы requestAction получил общий балл.

Чтобы получить общий балл, я полагаюсь на каждый цикл ( foreach ($customer как $customer) { ... }), чтобы получить каждого $customer['Customer']['id'] и передать его в requestAction и вернуть вернуться к результату.

QNS 1. Есть ли другой способ достичь этого результата?

QNS 2. Могу ли я вместо этого делать все в контроллере? Если так, то как?

КОНТРОЛЛЕР

function eachlesson($lessonid, $sessionkey, $customer_id) {

return $this->Score->find('first', array('conditions' => array('Score.test_bk_session_id' => $sessionkey, 'Customer.customers_types' => 'student', 'Score.lesson' => $lessonid, 'Score.customer_id' => $customer_id)));

}

ПОСМОТРЕТЬ

<table>
<?php foreach ($customers as $customer) { ?>
<tr>
   <td>
      <?php echo $customer['Customer']['customers_name']; ?>
   </td>
   <td>
   <?php 
   $customer_id = $customer['Customer']['id'];
   $sessionkey = $this->params['pass'][1];

   //LOOP THROUGH 10 TIMES TO GET LESSON 1 - 10 SCORES
   for ($i=1; $i<=10; $i++) { 
       $lessonid = $i;
       $score = $this->requestAction('/scores/eachlesson/'.$lessonid."/".$sessionkey."/".$customer_id);


   //GETTING THE TOTAL SCORE FOR LESSON 1 TO 10
   (int)${'totaleachlesson'.$i} = $score['Score']['BI_pts'] + $score['Score']['FD_pts'] + $score['Score']['PO_pts']  + $score['Score']['WW_pts'] + $score['Score']['MG_pts'] + $score['Score']['FO_pts'];

   }

    //ADDING THE TOTAL SCORE OF THE 10 LESSONS
   $figureofcorrecttotal = $totaleachlesson1 + $totaleachlesson2 + $totaleachlesson3 + $totaleachlesson4 + $totaleachlesson5 + $totaleachlesson6 + $totaleachlesson7 + $totaleachlesson8 + $totaleachlesson9 + $totaleachlesson10;

   //DISPLAY THE TOTAL SCORE
   echo $figureofcorrecttotal;

   ?>
   </td>
</tr>
<?php } ?>
</table>

HTML ВЫХОД

  <table class="tablesorter summary3pt2">
        <thead>
        <tr> 
                <th width="170" style="padding-right:5px;" class="empty">Name</th> 
                <th width="120" class="header">No of Correct</th> 

            </tr>
          </thead>
          <tbody>
                        <tr>
            <td class="bold" align="right">
            Drew Parsons                </td>
            <td>
         2                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Natasha Francis                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Johanna Harmon                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Aubrey Mckenzie                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Edith Sims                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Brandy Ruiz                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Toni Marshall                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Cedric Nash                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Penny Maldonado                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Brandi Perry                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Conrad Hogan                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Travis Sparks                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Winifred Watson                </td>
            <td>
         0                </td>
            </tr>
                            <tr>
            <td class="bold" align="right">
            Shannon Strickland                </td>
            <td>
         0                </td>
            </tr>
                        </tbody> 

        </table>

1 ответ

Прежде всего, почему вы "ДОЛЖНЫ" использовать requestAction? Вы вообще не соблюдаете соглашения о торте. Вам нужно потратить минуту и ​​прочитать документацию... Imo, вы хотите связать модель "Score" с моделью "Customer" и содержать вызовы "два в одном".

<?php
// Customer model.

class Customer extends AppModel {
    var $name = 'Customer';

    var $hasMany = array(
        'Score' => array(
            'className' => 'Score',
            'foreignKey' => 'customer_id',
            'limit' => 10,
            'conditions' => array(
                '<conditions go here>'
            )
        )
    );
}

?>

<?php
// Score model.

class Score extends AppModel {
    var $name = 'Score';

    var $belongsTo = array(
        'Customer' => array(
            'className' => 'Customer',
            'foreignKey' => 'customer_id' // This assumes you have a customer_id field in the 'scores' table.
        )
    );
}

?>

Теперь модели связаны, если вы не прикрепили к ним сдерживаемое поведение, вы можете сделать это в каждой модели или в основном app_controller.php, добавив:

var $actsAs = array('Containable');

Теперь все, что вам нужно сделать, это указать модель Score при выполнении поиска по модели Customer, и 10 баллов будут автоматически получены для вас.

<?php
// customers_controller.php

class CustomersController extends AppController {
    var $name = 'Customers';

    function index() {
        // Contain the child method.
        $this->Customer->contain(array(
            'Score' => array(
                'conditions' => array(
                    'Score.test_bk_session_id' => $sessionkey,
                    'Score.lesson' => $lessonid
                )
            )
        ));
        $customers = $this->Customer->find('all', array(
            'conditions' => array(
                'Customer.customers_types' => 'student'
            )
        ));
        // Now you have all your customers, AND their associated
        // scores. No more request action needed (never use that imo)
        $this->set('customers', $customers);

        // Your array should look like this:
        // $customers =
        //array(
        //    [0] => array(
        //        'Customer' => array(<CustomerArray>),
        //        'Score' => array(<ScoreArray>)
        //    ),
        //    [1] => ...
        //)
    }
}

?>

Я написал это довольно быстро, поэтому, пожалуйста, извините за любые ошибки или неправильные предположения. Надеюсь, это поможет вашей проблеме.

Другие вопросы по тегам