что-то не так с этим найти statment CakePHP 1,3 - PullRequest
0 голосов
/ 27 декабря 2011

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

Content:

    Notice (8): Undefined index: Article [APP\views\articles\view.ctp, line 27]

Created

    Notice (8): Undefined index: Article [APP\views\articles\view.ctp, line 31]

Notice (8): Undefined index: Article [APP\views\articles\view.ctp, line 73]

articles_controller.php

 function view($id=null) {

           $article = $this->Article->find('all', array(
      'conditions' => array(
        'Article.id'     => $id,
        'Article.status' => 1
      )
    ));

           $comment = $this->Article->Comment->find('all',
            array('conditions' =>
    array('Comment.article_id' => $id, 'Comment.status' => 1)));



              $this->set(compact('article','comment'));
              if(!empty($article)){

             // increment the number of items the dvd was viewed
                $this->Article->save(array(
                    'Article' => array(
                        'id' => $id,
                 'views' => ($article['Article']['views'] + 1)
                    )
                ));
              }

статьи / view.ctp

     <!-- to show article title,image,content,date  -->
<div class="formats view">



<h2>Title: <?php echo $article['Article']['title']; ?></h2>

                       <dl>
    <dt>Image:</dt>
        <dd>   <?php
 echo $html->image($h,array('height'=>'250px', 'width'=>'280px')); ?>
 </dd>

                <dt>Content:</dt>
        <dd><?php echo strip_tags($article['Article']['content']) ; ?></dd>


        <dt>Created</dt>
        <dd><?php echo substr($article['Article']['created'], 0, 15); ?></dd>







           <!-- to show comments  related with articles -->
<?php if(!empty($article['Comment'])): ?>

    <div class="related">
        <h3>Comments For this Article</h3>
        <table>
            <thead>

            </thead>
            <tbody>
                <?php foreach($comment as $comments): ?>
                <tr>
                <tr>
                <th>Name,date</th>
         <td><?php echo '&nbsp;'.$comments['Comment']['name'].' &nbsp;&nbsp;'.substr($comments['Comment']['created'], 0, 15); ?> </td>
                </tr>
                <tr>
                <th>title</th>
                 <td><?php echo $comments ['Comment']['title']; ?></td>
                 </tr>
                  <tr>
                   <th>content</th>
                    <td><?php echo $comments['Comment']['content']; ?></td>
                    </tr>
                </tr>
                <?php endforeach; ?>
            </tbody>
        </table>
    </div>

    <?php endif; ?>

эта таблица базы данных

CREATE TABLE IF NOT EXISTS `articles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  `views` int(11) NOT NULL,
  `section_id` int(11) NOT NULL,
  `status` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=47 ;

Ответы [ 2 ]

0 голосов
/ 27 декабря 2011

Привет вместо следующего:

<?php echo $article['Article']['title']; ?>

попробовать

<?php echo $article['title']; ?>

Я пока не уверен, почему это происходит, но у меня это сработало в других случаях ...

Также в выражении foreach для комментариев я заметил, что у вас есть

<?php foreach($comment as $comments){ ?>

Что я не думаю, будет отображать ваши комментарии правильно. Вы должны иметь

<?php foreach($comments as $comment){ ?>

И в вашем контроллере для этого используйте

 $comments = $this->Article->Comment->find('all', ...

Я создаю подобное приложение, и, по крайней мере, именно так я и справился со всем.

Если вам нужно, я отправлю вам или отправлю вам по электронной почте мой контроллер статей, контроллер комментариев и соответствующие представления для вашего обзора.

Спасибо

0 голосов
/ 27 декабря 2011

Попробуйте изменить свою первую находку следующим образом:

$article = $this->Article->Comment->find(

На это:

$article = $this->Article->find(...

(обратите внимание на отсутствие комментария во втором)

Кроме того - на самом деле нет причин, по которым вам нужно писать 2 отдельных запроса - это то, что CakePHP может легко обработать для вас с помощью Контейнерное поведение


СЛЕДУЮЩЕЕ ИСПРАВЛЕНИЕ (после внесения изменений из предыдущей части ответа):

Сделайте print_r для вашей переменной $ article.Я полагаю, вы увидите, что это должно быть:

$article[0]['Article']

вместо

$article['Article']
...