Причина в том, что ...
if($Q->num_rows() >0){
foreach($Q->result_array() as $row){
$data = array( //<-----------HERE
"id" => $row['id'],
"a_name" => $row['a_title'],
"a_description" => $row['a_description'],
"a_image" => $row['a_image']
);
}
}
Вы перезаписываете (переустанавливаете) переменную $data
каждый раз, когда выполняете цикл.
Вместо вышеупомянутого,попробуйте это ...
$data = array(); //declare an empty array as $data outside the loop
if($Q->num_rows() >0){
foreach($Q->result_array() as $row){
$data[] = array( //using square brackets will push new elements onto the array $data
"id" => $row['id'],
"a_name" => $row['a_title'],
"a_description" => $row['a_description'],
"a_image" => $row['a_image']
);
}
}
Таким образом, вы будете возвращать $ data в виде массива всех результатов вашего запроса, а не переназначать его и получать только один результат.