我有这样的数据库
+------------------+
| Invoices |
+------------------+
| id |
| customer_id (Fk) |
| description |
+------------------+
+------------------+
| Customers |
+------------------+
| id |
| firstname |
| lastname |
| description |
+------------------+
根据我的要求,我做了multimodel。在那个多模型客户模型中加载了发票模型。现在发票控制器的actionCreate()就像这样
public function actionCreate()
{
$model=new Invoices;
$customers = new Customers;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if (isset($_POST['Invoices'],$_POST['Customers']))
{
$model->attributes = $_POST['Invoices'];
$customers->attributes = $_POST['Customers'];
$valid = $model->validate();
$valid = $customers->validate();
if($valid)
{
$customers->save(false);
$model->customer_id = $customers->getPrimaryKey();
$model->save(false);
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('create',array(
'model'=>$model,
'customers' => $customers,
));
}
actionView()看起来像这样
public function actionView($id)
{
$this->render('view',array(
'model'=>$this->loadModel($id),
'customers'=>Invoices::model()->findByAttributes(array('id'=>$_GET['id']))->customer_id,
));
}
现在,当我使用renderpartial渲染表单并在View文件中更改我的代码时,就像这样
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'id',
'customer_id',
array(
'label' => 'Firstname',
'value' => $customers->firstname,
),
array(
'label' => 'Lastname',
'value' => $customers->lastname,
),
array(
'label' => 'description',
'value' => $customers->description,
),
),
)); ?>
它显示了这样的错误试图获取非对象的属性行'value'=&gt; $客户 - &GT;姓名, 那么有人可以告诉我错误的部分吗?欢迎任何帮助和建议。
答案 0 :(得分:2)
我认为以下代码存在问题:
public function actionView($id)
{
$this->render('view',array(
'model'=>$this->loadModel($id),
'customers'=>Invoices::model()->findByAttributes(array('id'=>$_GET['id']))->customer_id,
));
}
试试这段代码:
public function actionView($id)
{
$model = $this->loadModel($id);
$this->render('view',array(
'model'=>$model,
'customers'=>Customers::model()->findByAttributes(array('id'=>$model->customer_id)),
));
}
答案 1 :(得分:1)
Invoices模型中客户关系的名称是什么?我们说它是customs
。你可以试试这个:
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'id',
'customer_id',
array(
'label' => 'Firstname',
'value' => $model->customs->firstname,
),
array(
'label' => 'Lastname',
'value' => $model->customs->lastname,
),
array(
'label' => 'description',
'value' => $model->customs->description,
),
),
)); ?>
但是当然你必须用关系的实际名称替换customs
。
答案 2 :(得分:0)
此错误表示您正在尝试访问非对象。最有可能的是,它不是从渲染它的位置填充的。 一定要遵循
echo CVarDumper($_GET['id'],100,true)
echo CVarDumper($customers,100,true)
让我们知道那里有什么。
所以actionView()
应该是这样的
public function actionView($id)
{
$this->render('view',array(
'model'=>$this->loadModel($id),
`echo CVarDumper($_GET['id'],100,true)`
yii::app()->end();
'customers'=>Invoices::model()->findByAttributes(array('id'=>$_GET['id']))->customer_id,
));
}
显示它显示的内容。
步骤2将上述代码撤消到您的原始代码,然后添加
echo CVarDumper($customers,100,true)
yii::app()->end();
前
<?php $this->widget('zii.widgets.CDetailView', array(.....
然后检查显示的内容
答案 3 :(得分:0)
更改
'customers'=>Invoices::model()->findByAttributes(array('id'=>$_GET['id']))->customer_id,
到
'customers'=>Invoices::model()->findByAttributes(array('id'=>$_GET['id'])),
如果findByAttributes返回null,您可能仍会得到相同的错误。因此,在执行$ customers-&gt; firstname。
之前,您必须检查$ customers是否为null