sql — возвращает количество строк php mvs

Я пытаюсь вернуть количество результатов, найденных на моей странице над таблицей HTML. Я впервые использую фреймворк mvc, так что для меня это совершенно ново для меня.

Мой запрос работает и успешно отображает табличные результаты, моя проблема [вероятно] связана с позиционированием моего кода возврата?

Я включил мой код для справки;

модель

public function categoryView()
{
$sth = $this->db->prepare("SELECT
b.id,
b.title,
b.category,
FROM book
WHERE status != 'Archive' AND category = :cat ORDER BY id DESC LIMIT 15");

$sth->bindValue(':cat', $_GET['category']);
$sth->execute();

$result = $sth->fetchAll(PDO::FETCH_ASSOC); // won't run when included
return count($result); // won't run when included

$all_books = array();

foreach ($sth->fetchAll() as $book) {
$all_books[$book->id] = new stdClass();
$all_books[$book->id]->id = $book->id;
$all_books[$book->id]->title = $book->title;
$all_books[$book->id]->category = $book->cat_name;
}
return $all_books;
}

Посмотреть

Found <?php echo count($result); ?> records
<table>
<?php
foreach ($this->books as $book) {
echo "<tr>";
echo '<td>'.$book->id.'</td>';
echo '<td>'.$book->title.'</td>';
echo '<td>'.$book->category.'</td>';
echo "</tr>";
}
?>
</table>

контроллер

function categoryView()
{
$categoryView_model = $this->loadModel('Books');
$this->view->books = $categoryView_model->categoryView();
$this->view->render('books/categoryView');
}

Я получаю сообщения об ошибках на странице просмотра

Warning: `Invalid argument supplied for foreach() ... on line 51`

а также

Found
Notice: Undefined variable: result in ... on line 47
0 records

Строка 47 содержит Found <?php echo count($result); ?> records

Строка 51 содержит foreach ($this->books as $book) { ... }

Любой совет или помощь приветствуется.

1

Решение

Удалить эти две строки

$result = $sth->fetchAll(PDO::FETCH_ASSOC); // won't run when included
return count($result); // won't run when included

На ваш взгляд, изменения

Found <?php echo count($result); ?> records

в

Found <?php echo count($this->books); ?> records

Причина, по которой вы должны это сделать, заключается в том, что вы сохраняете результаты, возвращенные из categoryView() в books свойство представления при запуске следующей строки

$this->view->books = $categoryView_model->categoryView();

Обратите внимание, что количество всегда будет максимум 15. Если вы хотите отобразить общее количество найденных результатов, вы должны выдать отдельный select count(*) без limit пункт.

1

Другие решения

Нам бы очень помогло, если бы вы указали рамки. Честно говоря, я работал в Zend только как php-фреймворк, но там вы должны назначить свойство вашему представлению:

   $this->view->property = $all_books; //or any other property

и получить его в представлении

  <?php echo $this->property; ?>

Мне трудно поверить, что ваш MVC вызывает функцию (действие), которая в Zend должна быть названа особым образом из представления и поэтому использует возврат. Я скажу вам одну вещь: ваш способ отправки переменной в представление неверен, возвращение не должно быть правильным способом отправки. Без вашей структуры это единственный способ, которым я могу вам помочь. Кроме того, я бы сказал, что вы должны фактически отобразить isset для обеих переменных, и вы поймете, что моя теория верна: вы неправильно отправляете переменные из контроллера, действия или функции

0

По вопросам рекламы [email protected]