Логика 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] => ...
//)
}
}
?>
Я написал это довольно быстро, поэтому, пожалуйста, извините за любые ошибки или неправильные предположения. Надеюсь, это поможет вашей проблеме.