2013-06-13 3 views
0

То, что я пытаюсь сделать: Я хочу распечатать данные из таблицы с помощью CGridView, но одна важная вещь - мне нужно изменить значение «bookId» в $ criteria для значения «bookName» из другой таблицы.

Как я могу это сделать?

Отношения.

/// here comes code from model 

    public function search() { 
     // Warning: Please modify the following code to remove attributes that 
     // should not be searched. 
     $criteria = new CDbCriteria; 

    $criteria->compare('bookId',$this->bookId); 
      $criteria->compare('bookBookdetailId', $this->bookBookdetailId); 
      $criteria->compare('bookState', 1); 

     return new CActiveDataProvider($this, array(
      'criteria' => $criteria, 

/// here is code from view 


print_r($model); 
$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider' => $model->search(), 'columns' => array(
     'bookCatalgoueNumber', 
     'bookDescription', 
     'bookBookdetailId' 
     ), 

     ) 
); 

/// the name of the model is Book, the other is Bookdetail (and so are the tables) 

/// также bookBookdetailId является Foregin ключ, ссылки на Bookdetail.bookdetailId

// Я надеюсь, что результат будет название книги (bookdetailTitle) заменить bookBookdetailId

+0

показать свой код. Лучше понять. – som

+0

Пожалуйста, разместите код для того, чтобы мы лучше поняли – Ninad

+0

Не могли бы вы предоставить более подробную информацию? Дайте нам пример того, как выглядит ваш дизайн db и что вы ожидаете в результате. – MrSoundless

ответ

0

Если вы хотите найти/сортировать по этому колонку, это, вероятно, будет лучшим ответом я могу дать вам:

http://www.mrsoundless.com/php/yii/searching-and-sorting-a-column-from-a-related-table-in-a-cgridview/

UPDATE (потому что я предполагаю, что ты на самом деле не понимал ссылку. Или просто не хотят читать, потому что это долго ..)

Я принимаю:

  • Вы получили отношение к вашему столу bookdetails под названием «» bookdetails
  • Вы получили столбец ваша таблица bookDetails называется 'имя'

Шаг 1: Добавьте это к вашей модели:

private $_name = null; 
public function getName() 
{ 
    if ($this->_name === null && $this->bookDetails !== null) 
    { 
     $this->_name = $this->bookDetails->name; 
    } 
    return $this->_name; 
} 
public function setName($value) 
{ 
    $this->_name = $value; 
} 

Шаг 2: Теперь добавьте «имени» правила поиска в функции «правила» ваша модель Book

Шаг 3: Изменение функции «поиск» ваша модель книги для:

public function search() { 
    $criteria=new CDbCriteria; 
    $criteria->with = "bookDetails"; // Make sure you query with the post table. 

    $criteria->compare('t.bookId',$this->bookId,true); 
    $criteria->compare('t.bookState',$this->bookState); 
    $criteria->compare('t.bookBookdetailId',$this->bookBookdetailId,true); 
    $criteria->compare('bookDetails.name', $this->name,true); 

    $sort = new CSort(); 
    $sort->attributes = array(
     'defaultOrder'=>'t.create_time DESC', 
     'bookId'=>array(
      'asc'=>'t.bookId', 
      'desc'=>'t.bookId desc', 
     ), 
     'bookState'=>array(
      'asc'=>'t.bookState', 
      'desc'=>'t.bookState desc', 
     ), 
     'bookBookdetailId'=>array(
      'asc'=>'t.bookBookdetailId', 
      'desc'=>'t.bookBookdetailId desc', 
     ), 
     'name'=>array(
      'asc'=>'bookDetails.name', 
      'desc'=>'bookDetails.name desc', 
     ), 
    ); 

    return new CActiveDataProvider('Book', array(
     'criteria'=>$criteria, 
     'sort'=>$sort 
    )); 
} 

Шага 4: Теперь добавьте «имя» в массив столбцов в CGridView. Должно стать чем-то вроде:

'dataProvider' => $model->search(), 
'columns' => array(
    'bookCatalgoueNumber', 
    'bookDescription', 
    'bookBookdetailId', 
    'name', 
), 

Шаг 5: прочитайте статью, чтобы понять, что происходит. Шаг 6: Наслаждайтесь

+0

У меня нет администратора, поскольку я создаю его с нуля без использования Gii для создания CRUD. – user2481817

+0

Не имеет значения. В нем объясняется полная процедура. Если вы хорошо его прочтете, вы можете реализовать его и в своем проекте. Статья помогла многим многим Yii-ers – MrSoundless

+0

хорошо выглядит великолепно, но все же я не знаю, как добавить значение из другой таблицы в массив, чтобы заменить значение bookBookdetailId значениями bookdetailTitle – user2481817

0

Используйте его в ваш администратор

array('name' => 'book_id', 'header' => 'Book', 'value' =>'YourModel::getName($data["book_id"])')

getName() должны быть ваши функции в модели следующим образом

public function getName($book_id) 
{ 
    $sql = "SELECT book_name from `Your Table Name` where `id`='$book_id'"; 
    $command = Yii::app()->db->createCommand($sql); 
    $rs = $command->queryAll(); 
    return $rs; 
} 
+0

Используйте AR вместо простого sql, чтобы исправить вашу проблему там, где можете. Если у вас нет причин не ... – MrSoundless