Ошибка при получении значения второй модели в мультимодальной форме Yii - PullRequest
0 голосов
/ 17 февраля 2012

У меня есть такая база данных

+------------------+
|     Invoices     |
+------------------+
| id               |
| customer_id (Fk) |
| description      |
+------------------+

+------------------+
|    Customers     |
+------------------+
| id               |
| firstname        |
| lastname         |
| description      |
+------------------+

Таким образом, в соответствии с моим требованием я сделал многомодель . В этой модели многомодельных Клиентов загружается модель счета-фактуры. Теперь 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' => $ Customers-> firstname, Так может кто-нибудь сказать мне, где не та часть? Любая помощь и предложения приветствуются.

Ответы [ 4 ]

2 голосов
/ 21 февраля 2012

Я думаю, что проблема в следующем коде:

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 голос
/ 18 февраля 2012

Как называется отношение к клиентам в модели Счета?Допустим, это 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 на фактическое имя отношения.

0 голосов
/ 21 февраля 2012

изменение

  'customers'=>Invoices::model()->findByAttributes(array('id'=>$_GET['id']))->customer_id,

до

  'customers'=>Invoices::model()->findByAttributes(array('id'=>$_GET['id'])),

вы все равно можете получить ту же ошибку, если findByAttributes возвращает ноль. Поэтому вы должны проверить, равен ли $ customer нулевым или нет, прежде чем указывать $ Customers-> firstname.

0 голосов
/ 18 февраля 2012

Эта ошибка говорит о том, что вы пытаетесь получить доступ к необъекту.Скорее всего, он не заполнен с того места, где вы его отображаете.чтобы быть уверенным, сделайте следующее

  1. echo CVarDumper($_GET['id'],100,true)
  2. 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(.....

и затем проверьте, что отображается

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...