YII一页多模型无关系表

bejyjqdl  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(156)

我是YII的初学者。我想问一下,我有两个模型,它们有不同的表,并且没有关系。例如,模型用户和模型产品。所以在用户控制器中,我的代码是

public function actionIndex() {
$model= new Product;
$dataProvider=new CActiveDataProvider('User');
    $this->render('index',array(
        'dataProvider'=>$dataProvider,
    ));
$this->renderPartial('application.views.Product.view',array('model'=>$model));
}

但记录不能显示,只是属性。
因此,我可以在一个页面中显示用户记录和产品记录。

$data['user']= $this->user->record();
$data['product']=$this->product->record();
$this->load->view('index',$data)

那么,我问题是,在Yii中,我应该如何编写在一个页面中呈现多个模型,多个表,且彼此没有关系?

wlp8pajw

wlp8pajw1#

您应该在渲染视图中使用renderPartial(),因为正如文档所述,render():
渲染具有布局的视图。
此方法首先调用renderPartial来渲染视图(称为内容视图)。然后渲染布局视图,布局视图可以在适当的位置嵌入内容视图。在布局视图中,可以通过变量$content访问内容视图渲染结果。最后,它调用processOutput来插入脚本和动态内容(如果可用)。

public function actionIndex() {
$model= new Product;
$dataProvider=new CActiveDataProvider('User');

$this->render('applicationindex',array(
    'dataProvider'=>$dataProvider,
));

}

那么在视图中,

$this->renderPartial('application.views.Product.view',array('model'=>$model));
9q78igpj

9q78igpj2#

(IDK这-〉renderPartial工作,我尝试使用你的代码,但只有一个记录出现,实际上我有1000多个记录)
我用两种不同的方法解决了这个问题,用多个没有关系的表来渲染多个模型。

我使用小部件第一种方法

在组件文件夹中创建小部件

class ProductWidget extends CWidget {
public function run() {
$models =      Product::model()->findAll(array('condition'=>'product_token="A"'));
$this->render('category', array(
'models'=>$models   
    ));
}
}

然后在组件/视图中为该小部件创建视图

<?php if($models != null): ?>
<ul>
<?php foreach($models as $model): ?>
<li><?php echo $model->product_token; ?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>

最后在Views(layouts/column)文件夹中我写了这个

<?php $this->widget('ProductWidget'); ?>

对于第二种方法(用户控制器中的函数actionIndex)

public function actionIndex() {
$models = Product::model()->findAll(array('condition'=>'Product_token="A"'))
$dataProvider=new CActiveDataProvider('User');
$this->render('index',array(
        'dataProvider'=>$dataProvider,
         'models' => $models,
));

AND视图中的最后一个。(视图/用户/索引)

<?php foreach($models as $model):
echo $model->product_token;
endforeach;
?>

我认为第二种方法更好,你可以加上分页或其他什么。

相关问题