我想制作网站,附上新闻和评论。 我制作了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_com
。id
,Infos_com
。id_infos
,Infos_com
。username
,Infos_com
。{ {1}},mail
。Infos_com
,ip
。Infos_com
,created
。Infos_com
,body
。{{1 } {FROM} Infos_com
。info_id
AS blogdb
WHERE infos_coms
。Infos_com
IN(1,2,3,4,5)
我有两张桌子,所以我不明白哪里出错。
答案 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)
我终于完成了它!
我将我的Infos_com中的列名从id_infos更改为info_id
接下来我将我的索引代码编辑为
<?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>';
}
}
} ?>
并且我在新闻中得到了我的评论,谢谢!