150 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| $class=get_class($model);
 | |
| Yii::app()->clientScript->registerScript('gii.model',"
 | |
| $('#{$class}_connectionId').change(function(){
 | |
| 	var tableName=$('#{$class}_tableName');
 | |
| 	tableName.autocomplete('option', 'source', []);
 | |
| 	$.ajax({
 | |
| 		url: '".Yii::app()->getUrlManager()->createUrl('gii/model/getTableNames')."',
 | |
| 		data: {db: this.value},
 | |
| 		dataType: 'json'
 | |
| 	}).done(function(data){
 | |
| 		tableName.autocomplete('option', 'source', data);
 | |
| 	});
 | |
| });
 | |
| $('#{$class}_modelClass').change(function(){
 | |
| 	$(this).data('changed',$(this).val()!='');
 | |
| });
 | |
| $('#{$class}_tableName').bind('keyup change', function(){
 | |
| 	var model=$('#{$class}_modelClass');
 | |
| 	var tableName=$(this).val();
 | |
| 	if(tableName.substring(tableName.length-1)!='*') {
 | |
| 		$('.form .row.model-class').show();
 | |
| 	}
 | |
| 	else {
 | |
| 		$('#{$class}_modelClass').val('');
 | |
| 		$('.form .row.model-class').hide();
 | |
| 	}
 | |
| 	if(!model.data('changed')) {
 | |
| 		var i=tableName.lastIndexOf('.');
 | |
| 		if(i>=0)
 | |
| 			tableName=tableName.substring(i+1);
 | |
| 		var tablePrefix=$('#{$class}_tablePrefix').val();
 | |
| 		if(tablePrefix!='' && tableName.indexOf(tablePrefix)==0)
 | |
| 			tableName=tableName.substring(tablePrefix.length);
 | |
| 		var modelClass='';
 | |
| 		$.each(tableName.split('_'), function() {
 | |
| 			if(this.length>0)
 | |
| 				modelClass+=this.substring(0,1).toUpperCase()+this.substring(1);
 | |
| 		});
 | |
| 		model.val(modelClass);
 | |
| 	}
 | |
| });
 | |
| $('.form .row.model-class').toggle($('#{$class}_tableName').val().substring($('#{$class}_tableName').val().length-1)!='*');
 | |
| ");
 | |
| ?>
 | |
| <h1>Model Generator</h1>
 | |
| 
 | |
| <p>This generator generates a model class for the specified database table.</p>
 | |
| 
 | |
| <?php $form=$this->beginWidget('CCodeForm', array('model'=>$model)); ?>
 | |
| 
 | |
| 	<div class="row sticky">
 | |
| 		<?php echo $form->labelEx($model, 'connectionId')?>
 | |
| 		<?php echo $form->textField($model, 'connectionId', array('size'=>65))?>
 | |
| 		<div class="tooltip">
 | |
| 		The database component that should be used.
 | |
| 		</div>
 | |
| 		<?php echo $form->error($model,'connectionId'); ?>
 | |
| 	</div>
 | |
| 	<div class="row sticky">
 | |
| 		<?php echo $form->labelEx($model,'tablePrefix'); ?>
 | |
| 		<?php echo $form->textField($model,'tablePrefix', array('size'=>65)); ?>
 | |
| 		<div class="tooltip">
 | |
| 		This refers to the prefix name that is shared by all database tables.
 | |
| 		Setting this property mainly affects how model classes are named based on
 | |
| 		the table names. For example, a table prefix <code>tbl_</code> with a table name <code>tbl_post</code>
 | |
| 		will generate a model class named <code>Post</code>.
 | |
| 		<br/>
 | |
| 		Leave this field empty if your database tables do not use common prefix.
 | |
| 		</div>
 | |
| 		<?php echo $form->error($model,'tablePrefix'); ?>
 | |
| 	</div>
 | |
| 	<div class="row">
 | |
| 		<?php echo $form->labelEx($model,'tableName'); ?>
 | |
| 		<?php $this->widget('zii.widgets.jui.CJuiAutoComplete',array(
 | |
| 			'model'=>$model,
 | |
| 			'attribute'=>'tableName',
 | |
| 			'name'=>'tableName',
 | |
| 			'source'=>Yii::app()->hasComponent($model->connectionId) ? array_keys(Yii::app()->{$model->connectionId}->schema->getTables()) : array(),
 | |
| 			'options'=>array(
 | |
| 				'minLength'=>'0',
 | |
| 				'focus'=>new CJavaScriptExpression('function(event,ui) {
 | |
| 					$("#'.CHtml::activeId($model,'tableName').'").val(ui.item.label).change();
 | |
| 					return false;
 | |
| 				}')
 | |
| 			),
 | |
| 			'htmlOptions'=>array(
 | |
| 				'id'=>CHtml::activeId($model,'tableName'),
 | |
| 				'size'=>'65',
 | |
| 				'data-tooltip'=>'#tableName-tooltip'
 | |
| 			),
 | |
| 		)); ?>
 | |
| 		<div class="tooltip" id="tableName-tooltip">
 | |
| 		This refers to the table name that a new model class should be generated for
 | |
| 		(e.g. <code>tbl_user</code>). It can contain schema name, if needed (e.g. <code>public.tbl_post</code>).
 | |
| 		You may also enter <code>*</code> (or <code>schemaName.*</code> for a particular DB schema)
 | |
| 		to generate a model class for EVERY table.
 | |
| 		</div>
 | |
| 		<?php echo $form->error($model,'tableName'); ?>
 | |
| 	</div>
 | |
| 	<div class="row model-class">
 | |
| 		<?php echo $form->label($model,'modelClass',array('required'=>true)); ?>
 | |
| 		<?php echo $form->textField($model,'modelClass', array('size'=>65)); ?>
 | |
| 		<div class="tooltip">
 | |
| 		This is the name of the model class to be generated (e.g. <code>Post</code>, <code>Comment</code>).
 | |
| 		It is case-sensitive.
 | |
| 		</div>
 | |
| 		<?php echo $form->error($model,'modelClass'); ?>
 | |
| 	</div>
 | |
| 	<div class="row sticky">
 | |
| 		<?php echo $form->labelEx($model,'baseClass'); ?>
 | |
| 		<?php echo $form->textField($model,'baseClass',array('size'=>65)); ?>
 | |
| 		<div class="tooltip">
 | |
| 			This is the class that the new model class will extend from.
 | |
| 			Please make sure the class exists and can be autoloaded.
 | |
| 		</div>
 | |
| 		<?php echo $form->error($model,'baseClass'); ?>
 | |
| 	</div>
 | |
| 	<div class="row sticky">
 | |
| 		<?php echo $form->labelEx($model,'modelPath'); ?>
 | |
| 		<?php echo $form->textField($model,'modelPath', array('size'=>65)); ?>
 | |
| 		<div class="tooltip">
 | |
| 			This refers to the directory that the new model class file should be generated under.
 | |
| 			It should be specified in the form of a path alias, for example, <code>application.models</code>.
 | |
| 		</div>
 | |
| 		<?php echo $form->error($model,'modelPath'); ?>
 | |
| 	</div>
 | |
| 	<div class="row">
 | |
| 		<?php echo $form->labelEx($model,'buildRelations'); ?>
 | |
| 		<?php echo $form->checkBox($model,'buildRelations'); ?>
 | |
| 		<div class="tooltip">
 | |
| 			Whether relations should be generated for the model class.
 | |
| 			In order to generate relations, full scan of the whole database is needed.
 | |
| 			You should disable this option if your database contains too many tables.
 | |
| 		</div>
 | |
| 		<?php echo $form->error($model,'buildRelations'); ?>
 | |
| 	</div>
 | |
| 	<div class="row">
 | |
| 		<?php echo $form->labelEx($model,'commentsAsLabels'); ?>
 | |
| 		<?php echo $form->checkBox($model,'commentsAsLabels'); ?>
 | |
| 		<div class="tooltip">
 | |
| 			Whether comments specified for the table columns should be used as the new model's attribute labels.
 | |
| 			In case your RDBMS doesn't support feature of commenting columns or column comment wasn't set,
 | |
| 			column name would be used as the attribute name base.
 | |
| 		</div>
 | |
| 		<?php echo $form->error($model,'commentsAsLabels'); ?>
 | |
| 	</div>
 | |
| 
 | |
| <?php $this->endWidget(); ?>
 |