Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2012, 00:06   #1
vovik93
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 47
По умолчанию Yii Framework Подскажыте как связать две таблицы

Подскажите пожалуйста как связать де таблицы.
Есть таблицы Персонал, Страна, Города.
Staff {id, first_name, last_name, country, city, ...};
Country { id, name};
City { id, id_country, name};

Один контроллер, три модели :
StaffContriller;
Staff;
Country;
City;

Нужно связать страну и город чтоб при создании сотрудника было два DropDownList { Country, City}, при выборе страны загружались города этой страны.

Я в yii и php новичок, не могу найти подробной инструкции, ищу целый день, уже перепробовал все что есть в сети, ничего не получается.

Помогите пожалуйста, буду очень благодарен!

Контроллер
PHP код:
 public function actionDynamiccities()
    {
            
$data City::model()->findAll('id_country= :id_country', array(':id_country' => (int) $_POST['StaffController']['id_country']));
            
$data CHtml::listData($data'id''name');
            foreach(
$data as $id => $name) {
                echo 
CHtml::tag('option', array('value' => $id), CHtml::encode($name), true);
            }
    } 
Модель Country
PHP код:
    public function relations()
    {
        
// NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        
return array(
        
'city' => array(self::HAS_MANY'City''id_country'),
        );
    } 
Модель City
PHP код:
 public function relations()
    {
        
// NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        
return array(
        
'country' => array(self::BELONGS_TO'Country''id'),
        );
    } 
Представление
PHP код:
$list CHtml::listData(Country::model()->findAll(), 'id''name');
            echo 
CHtml::dropDownList('id_country'''$list, array('empty'=>'-- Select Country --'),
                array(
                    
'ajax' => array(
                        
'type' => 'POST',
                        
//'url' => $this->createUrl('StaffController/dynamiccities'),
                        
'url' => CController::createUrl('StaffController/dynamiccities'),
                        
'update'=>'#modification_id',
                    ) )  );
            echo 
'<br>';
            echo 
CHtml::dropDownList('modification_id''', array()); 
vovik93 вне форума Ответить с цитированием
Старый 10.06.2012, 13:45   #2
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Да наверное Вам надо изучить PHP, а потом концепцию этого фраемворка.
Контроллер у вас бред.
Вот пример простейшего контроллера
Код:
public function actionIndex()
{
    $model = City::model()->findAll();
    $this->render('index',array('model'=>$model));
}
отображение
Код:
$form = $this->beginWidget("CActiveForm",array(
        'id'=>'news-form',
        'enableClientValidation'=>true,
        'enableAjaxValidation'=>true,
        'clientOptions'=>array(
            'validateOnSubmit'=>true,
        ),
    ));
<?$ld = CHtml::listdata($model,'id','name');
echo $form->dropDownList($model,'id',$ld);
?>
$this->endWidget();
З.Ы.: Могут быть ошибки так как на быструю руку
Самый перспективный framework Yii (c)

Последний раз редактировалось TranceSmile; 10.06.2012 в 13:52.
TranceSmile вне форума Ответить с цитированием
Старый 10.06.2012, 14:17   #3
vovik93
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от TranceSmile Посмотреть сообщение
Да наверное Вам надо изучить PHP, а потом концепцию этого фраемворка.
Контроллер у вас бред.
Вот пример простейшего контроллера
Код:
public function actionIndex()
{
    $model = City::model()->findAll();
    $this->render('index',array('model'=>$model));
}
отображение
Код:
$form = $this->beginWidget("CActiveForm",array(
        'id'=>'news-form',
        'enableClientValidation'=>true,
        'enableAjaxValidation'=>true,
        'clientOptions'=>array(
            'validateOnSubmit'=>true,
        ),
    ));
<?$ld = CHtml::listdata($model,'id','name');
echo $form->dropDownList($model,'id',$ld);
?>
$this->endWidget();
З.Ы.: Могут быть ошибки так как на быструю руку


Это конечно все хорошо, но как вывести в DropDownList данные с бд я знаю. Мой вопрос состоял в том чтоб выводить города только те которые принадлежат выбраной стране.
vovik93 вне форума Ответить с цитированием
Старый 10.06.2012, 19:25   #4
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Цитата:
Сообщение от vovik93 Посмотреть сообщение
Контроллер
PHP код:
 public function actionDynamiccities()
    {
            
$data City::model()->findAll('id_country= :id_country', array(':id_country' => (int) $_POST['StaffController']['id_country']));
            
$data CHtml::listData($data'id''name');
            foreach(
$data as $id => $name) {
                echo 
CHtml::tag('option', array('value' => $id), CHtml::encode($name), true);
            }
    } 
по Вашему это правильно?
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 10.06.2012, 20:03   #5
vovik93
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от TranceSmile Посмотреть сообщение
по Вашему это правильно?
Делал как написано здесь http://www.yiiframework.com/wiki/24/...dent-dropdown/

Если там не правильно то скажите где правильно.
vovik93 вне форума Ответить с цитированием
Старый 10.06.2012, 20:35   #6
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

покажи все представление
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 10.06.2012, 20:40   #7
vovik93
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 47
По умолчанию

PHP код:
<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    
'id'=>'staff-form',
    
'enableAjaxValidation'=>true,
    
'enableClientValidation'=>true,
    
'clientOptions'=>array(
        
'validateOnSubmit'=>true,
    ),
    
'htmlOptions'=>array('enctype'=>'multipart/form-data'),
)); 
?>
    <?php //echo CHtml::form('','post',array('enctype'=>'multipart/form-data')); ?>

    <p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>

    <div class="row">
        <?php echo $form->labelEx($model,'first_name'); ?>
        <?php echo $form->textField($model,'first_name',array('size'=>60,'maxlength'=>128)); ?>
        <?php echo $form->error($model,'first_name'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'last_name'); ?>
        <?php echo $form->textField($model,'last_name',array('size'=>60,'maxlength'=>128)); ?>
        <?php echo $form->error($model,'last_name'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'email'); ?>
        <?php echo $form->textField($model,'email',array('size'=>60,'maxlength'=>128)); ?>
        <?php echo $form->error($model,'email'); ?>
    </div>
<!--
    <div class="row">
        <?php echo $form->labelEx($model,'country'); ?>
        <?php echo $form->dropDownList($model,'country'CHtml::listData(Country::model()->findAll(), 'id''name'), array('empty'=>'-- Select Country --')); ?>
        <?php echo $form->error($model,'country'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'city'); ?>
        <?php echo $form->dropDownList($model,'city'CHtml::listData(City::model()->findAll(), 'id''name'), array('empty'=>'-- Select City --')); ?>
        <?php echo $form->error($model,'city'); ?>
    </div>
    -->

<?

            $list 
CHtml::listData(Country::model()->findAll(), 'id''name');
            
//echo CHtml::dropDownList('id_country','', array(1=>'USA',2=>'France',3=>'Japan'),
            
echo CHtml::dropDownList('id_country'''$list, array('empty'=>'-- Select Country --'),
                array(
                    
'ajax' => array(
                        
'type' => 'POST',
                        
'url' => CController::createUrl('staff/dynamiccities'), 
                        
'update'=>'#modification_id',
                    )
                )
            );
            echo 
'<br>';
            echo 
CHtml::dropDownList('modification_id''', array());

    
?>


    
    <div class="row">
    <?php echo $form->labelEx($model,'photo'); ?>
    <?php echo $form->FileField($model'photo'); ?>
    <?php echo $form->error($model,'photo'); ?>
    </div>

    <div class="row">
        <?php echo $form->labelEx($model,'notes'); ?>
        <?php echo $form->textArea($model,'notes',array('rows'=>6'cols'=>60)); ?>
        <?php echo $form->error($model,'notes'); ?>
    </div>

    <div class="row buttons">
        <?php echo CHtml::submitButton($model->isNewRecord 'Create' 'Save'); ?>
        <?php echo CHtml::submitButton('Return',array(
             
'submit' => '/index.php?r=staff/admin')); ?>
    </div>

<?php $this->endWidget(); ?>

</div><!-- form -->
vovik93 вне форума Ответить с цитированием
Старый 10.06.2012, 20:51   #8
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Код:
 public function actionDynamiccities() 
    { 
            $data = City::model()->findAll('id_country= :id_country', array(':id_country' => (int) $_POST['staff-controller']['id_country'])); 
            $data = CHtml::listData($data, 'id', 'name'); 
            foreach($data as $id => $name) { 
                echo CHtml::tag('option', array('value' => $id), CHtml::encode($name), true); 
            } 
    }
Пробуй так
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 10.06.2012, 21:00   #9
vovik93
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 47
По умолчанию

Все равно не работает, может я не так связал модели, или что то намутил с названиями полей в бд?

От как узнать где ошибка? Например в прикладном программировании можно вывести какие то сообщения чтоб узнать где программа не правильно работает. А тут это ни как нельзя?
vovik93 вне форума Ответить с цитированием
Старый 10.06.2012, 21:05   #10
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

а ты на денвере пробуешь? Может ajax запрос не проходит. В firefox можно посмотреть что там с запросом и с ответом.
З.Ы. Плагин firebug
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как связать Entity FrameWork + PostgreSql! Волкодав Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 23.04.2012 11:12
topserver+yii framework Farrel PHP 0 01.03.2011 00:49
Как связать две таблицы Savage Microsoft Office Access 0 09.04.2009 13:15
Как связать две программы на Паскале Romanus Паскаль, Turbo Pascal, PascalABC.NET 3 29.07.2007 21:09