CakePHP不同的表显示在同一页面中

时间:2013-11-13 14:50:46

标签: cakephp view model controller

我想制作网站,附上新闻和评论。 我制作了Model Infos.php(连接到我页面上的新闻)和Model Infos_coms.php(应该为每个新闻保存评论)。对于每个模型,我有控件如下

InfosController.php

class InfosController extends AppController
{
public $helpers = array('Html','Form','Session');
public $components = array('Session');

public function index()
{

    $this->set('inform', $this->Info->find('all'));
    //$this->loadModel('Infos_com');
    //$this->set('com', $this->Infos_com->find('all'));
}}

,Info_comsController.php。

<?php
class Infos_comsController extends AppController
{
public $helpers = array('Html','Form','Session');
public $components = array('Session');

public function index()
{
    $this->set('com',  $this->Infos_com->find('all'));
}}

并且有我的问题,我不知道如何在一个页面上显示两个表格(新闻及其评论)

这是我的索引,我有两次关于视图的红色菜谱章节,我没有找到解决问题的答案。

这是我的文件夹(View / Infos)中的索引文件

<body>
<?php echo $this->Html->link(__('Dodaj newsa',true),array('action'=>'add')); ?>
<div class="container">
<?php
foreach ($inform as $news) : ?>

    <h3>
        <?php echo $news['Info']['title']; ?>
    </h3>
    <p>
        <?php echo $news['Info']['body']; ?>
    </p>
    <small>
        <?php echo $news['Info']['created']; ?>
    </small>
    <small>IP: 
        <?php echo $news['Info']['ip']; ?>
    </small>

<!-- existing comments -->

        <?php foreach ($com as $comment): ?>
        <h4>
            <?php echo $comment['Infos_com']['body']; ?>
        </h4>
        <small>
            <?php echo $comment['Infos_com']['created']; ?><br>
            <?php echo $comment['Infos_com']['ip']; ?>
        </small>

        <!-- adding comments -->
        <div class="form-group">
            <?php echo $this->Form->create('Infos_com'); ?>
            <?php echo $number = $comment['Info']['id']; ?>
            <?php echo $this->Form->input(__('mail',true),array('class'=>'form-control')) ?>
            <?php echo $this->Form->input(__('Comment body',true), array('class'=>'form-control')); ?>
            <?php echo $this->Form->submit(__('Dodaj komentarz',true),array('class'=>'btn btn-info')); ?>
            <?php echo $this->Form->end(); ?>
        </div>

<?php endforeach; ?>
 <?php endforeach; unset($news); unset($comment);?>

我会感激任何提示

修改 我跟随Guillemo Mansilla建议,但现在我遇到了数据库的问题。我已经使用了Guillemo Mansilla代码,更改了名称,并且还添加了我认为正确的内容。有我的模态

info.php的

<?php

class Info extends AppModel
{
public $hasMany = array('Infos_com');
public $validate = array(
    'title'=>array(
        'rule'=>'notEmpty'
    ),
    'body'=>array(
        'rule'=>'notEmpty'
    )
);
}
?>

Infos_com.php

<?php

class Infos_com extends AppModel
{
public $belongsTo = array('Info');
public $validate = array(
    'mail'=>array(
        'requierd'=>array(
            'rule'=>'notEmpty',
            'message'=>'Write your email'
        )
    ),
    'body'=>array(
        'rule'=>'notEmpty',
        'message'=>'Write a comment'
    )
);
}
?>

我将body部分内的index.ctp改为

<?php if (isset($inform)) {
foreach($inform as $info) {
        echo $info['Info']['title'];
        foreach($info['Infos_com'] as $comment) {
            echo $comment['Infos_com']['body'];
        }
    }
} ?>

现在我收到了错误

  

数据库错误   错误:SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'Infos_com.info_id'

SQL查询:SELECT Infos_comidInfos_comid_infosInfos_comusernameInfos_com。{ {1}},mailInfos_comipInfos_comcreatedInfos_combody。{{1 } {FROM} Infos_cominfo_id AS blogdb WHERE infos_comsInfos_com IN(1,2,3,4,5)

我有两张桌子,所以我不明白哪里出错。

2 个答案:

答案 0 :(得分:0)

我会假设您的关联是正确的,即Info hasMany Infos_com,所以在您的信息模型中你有类似的东西

public $hasMany => array('Infos_com')

我将假设两个模型都已正确创建(您没有粘贴模型)

现在,在您的控制器InfosController中,只需执行此操作

$this->Info->recursive = 1;
$this->set('inform', $this->Info->find('all'));

在您的视图中,您将在名为$ inform的var中包含所有“infos”及其注释,只是递归地迭代它

if (isset($inform)) {
    foreach($inform as $info) {
        echo $info['Info']['title']; //I dont even know if you have a field named "title"
        foreach($info['Infos_com'] as $comment) {
            echo $comment['Infos_com']['comment'];
        }
    }
}

请记住,这段代码可能不起作用,因为我们使用不同的名称,只是根据你在那里的内容进行调整

答案 1 :(得分:0)

我终于完成了它!

  1. 我将我的Infos_com中的列名从id_infos更改为info_id

  2. 接下来我将我的索引代码编辑为

    <?php if (isset($inform)) {
    foreach($inform as $info) {
        echo $info['Info']['title']; echo '<br>';
        echo $info['Info']['body']; echo '<br>';
        foreach($info['Infos_com'] as $comment) {
            echo $comment['body']; echo '<br>';
            echo $comment['mail']; echo '<br>';
        }
    }
    } ?>
    
  3. 并且我在新闻中得到了我的评论,谢谢!