#php #oop #laravel-4
#php #ооп #laravel-4
Вопрос:
я пытаюсь повторно вызвать пользовательскую функцию m с одинаковым или разными значениями параметров внутри параметров цикла foreach в зависимости от значения ключа, предоставленного моим foreach.
foreach ($result as $r) {
if($r->marks1==null || $r->marks2==null)
{
echo $r->p_code;
$toUpdate=$this->getResult($username,$r->p_code);
print_r($toUpdate);
}
}
но когда я печатаю последний результат запроса, я получаю $ toUpdate, добавляемый к последнему запросу параметра.
Array
(
[query] => select * from `result` where (`studentid` = ?) and `studentid` = ? and `ccode` = ? and `a_no` = ? order by `date` desc limit 1
[bindings] => Array
(
[0] => XYZ
[1] => XYZ
[2] => course123code
[3] => 12321
)
[time] => 0.18
)
мое имя пользователя становится таким же, в то время как код курса переопределяет get при поиске второго результата.
я хочу получить результат getResult()
внутри цикла foreach, чтобы он мог выдавать соответствующий результат для разных значений параметров.
public function getLatestResult($username,$course_code)
{
$user=new User;
$currentDetailOfUser=$this->userCurrentDetail($username);
$userdetail=json_decode($currentDetailOfUser,true);
$username =$userdetail['username'];
$studentid =$userdetail['userid'];
$studentBatch =$userdetail['batch'];
$programCode =$userdetail['programCode'];
$activeSemester =$userdetail['activesemester'];
$condition_key=array(
'studentid' =>$studentid
);
$getCurrentResult1 =$user->getDetail('student_result',$condition_key);
$getCurrentResult2 =$user->getDetail('student_result',$condition_key);
$resultAssessment1=$getCurrentResult1->where('studentid',$studentid)->where('course_code',$course_code)->where('assignment_no',1)->orderBy('date','Desc')->limit(1)->get();
$resultAssessment2=$getCurrentResult2->where('studentid',$studentid)->where('course_code',$course_code)->where('assignment_no',2)->orderBy('date','Desc')->limit(1)->get();
$recentResult=array_merge($resultAssessment1,$resultAssessment2);
return $recentResult;
}
Ответ №1:
Это плохая практика, если вы извлекаете данные db
изнутри foreach loop
.
Кстати, вы можете сделать это, сохранив все новые результаты в том же массиве, проиндексировав его некоторым уникальным значением, это будет выглядеть следующим образом-
$toUpdate=array();
foreach ($result as $r) {
if($r->marks1==null || $r->marks2==null)
{
echo $r->p_code;
$toUpdate[$r->p_code]=$this->getResult($username,$r->p_code); // added $r->p_code as index to Array - $toUpdate
}
}
print_r($toUpdate); // this will give all the related result according your parameters
[ОБНОВИТЬ]
Попробуйте использовать unset($yourarray)
для вашего следующего запроса, этот массив будет новым, и они присваивают новое значение каждый раз —
public function getLatestResult($username,$course_code)
{
$user=new User;
$currentDetailOfUser=$this->userCurrentDetail($username);
$userdetail=json_decode($currentDetailOfUser,true);
$username =$userdetail['username'];
$studentid =$userdetail['userid'];
$studentBatch =$userdetail['batch'];
$programCode =$userdetail['programCode'];
$activeSemester =$userdetail['activesemester'];
$condition_key=array(
'studentid' =>$studentid
);
$getCurrentResult1 =$user->getDetail('student_result',$condition_key);
$getCurrentResult2 =$user->getDetail('student_result',$condition_key);
$resultAssessment1=$getCurrentResult1->where('studentid',$studentid)->where('course_code',$course_code)->where('assignment_no',1)->orderBy('date','Desc')->limit(1)->get();
$resultAssessment2=$getCurrentResult2->where('studentid',$studentid)->where('course_code',$course_code)->where('assignment_no',2)->orderBy('date','Desc')->limit(1)->get();
unset($currentDetailOfUser);
unset($userdetail);
unset($condition_key);
unset($recentResult);
$recentResult=array_merge($resultAssessment1,$resultAssessment2);
return $recentResult;
}
Надеюсь, это может вам помочь.
Комментарии:
1. Да, вы правы, что это плохая практика, но, несмотря на то, что мне это нужно, просто посмотрите запрос mysql, который я опубликовал в своем вопросе Student_id добавляется при перезаписи p_code, это потому, что я ищу diff p_code для того же пользователя?
2. можете ли вы также опубликовать свой
getResult
код? поэтому было бы неплохо проверить все, прежде чем переходить к любому другому решению.3. @user3345331 — Не могли бы вы рассказать, пожалуйста, в чем разница между ними:
$getCurrentResult1=$user->getDetail('student_result',$condition_key); $getCurrentResult2=$user->getDetail('student_result',$condition_key);
. То же самое$condition_key'
и$studentid
. Я почему вы получаете два раза один и тот же результат, и вы также объединили их, почему? Это может быть проблемой.4. поступая таким образом, я пытаюсь получить данные, хранящиеся в двух строках таблицы, и вернуть их в одном массиве
5. Вы можете получить все строки одним запросом из базы данных, если одно условие совпадает в нескольких строках. Вы пытались напечатать `$getCurrentResult1′. я уверен, что это выдаст обе строки в рамках одного запроса. Или я сбился с пути.