如何在Yii中创建多模型表单?我搜索了Yii的整个文档,但没有得到任何有趣的结果.有人可以给我一些方向或想法吗?任何帮助都会很明显.
我有一个dropDownList在我看来,它是由填充clients表,表中包含样柱first_name,last_name,id等等,现在我想展示first_name并last_name作为显示文本和id在下拉列表中的值,我有做id的价值和first_name作为显示文本,但在这里我想组合这些列(first_name和last_name)并用作显示文本.
在模型中
function getClients()
{
$Clients = Client::model()->findAll();
$list = CHtml::listData($Clients , 'client_id', 'first_name');
return $list;
}
Run Code Online (Sandbox Code Playgroud)
在视野中
echo $form->dropDownList($model,'client_id',$model->getClients());
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Yii项目.在Yii模型上执行save()时,如何使用MySQL的ON DUPLICATE功能(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html)?
我的MySQL如下:
CREATE TABLE `ck_space_calendar_cache` (
`space_id` int(11) NOT NULL,
`day` date NOT NULL,
`available` tinyint(1) unsigned NOT NULL DEFAULT '0',
`price` decimal(12,2) DEFAULT NULL,
`offer` varchar(45) DEFAULT NULL,
`presale_date` date DEFAULT NULL,
`presale_price` decimal(12,2) DEFAULT NULL,
`value_x` int(11) DEFAULT NULL,
`value_y` int(11) DEFAULT NULL,
PRIMARY KEY (`space_id`,`day`),
KEY `space` (`space_id`),
CONSTRAINT `space` FOREIGN KEY (`space_id`) REFERENCES `ck_space` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
我的PHP是如下:
$cache = new SpaceCalendarCache();
$cache->attributes = …Run Code Online (Sandbox Code Playgroud) YII中ActiveRecord和模型之间的关系或区别是什么?
我试图登录is_object(CActiveRecord::model('Project'));并期待false但它又回来了true;
由于日志记录表明它是一个对象,我认为它代表表中的一行,但我找不到任何代表coloumns的属性.
另外http://www.yiiframework.com/doc/api/1.1/CActiveRecord#model-detail声明它返回了一个CActiveRecord类的实例,但我找不到该对象中表行的任何值.
我在我的模型中构建了一个自定义函数并返回原始数据:
function(){
...
$connection=Yii::app()->db;
$command=$connection->createCommand($sql);
$rows=$command->queryAll();
return $rows;
}
Run Code Online (Sandbox Code Playgroud)
$ campModel = $ model-> function ..
然后我在CArrayDataProvider中使用这些行:
$dataProvider=new CArrayDataProvider($campModel);
Run Code Online (Sandbox Code Playgroud)
最后我试图使用CGrid查看:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'bo-campaigns-grid',
'dataProvider'=>$campModel,...
Run Code Online (Sandbox Code Playgroud)
我猜这与CGrid的分页方式有关...但我输了谢谢你的帮助:)
我正在yii中构建一个数据库密集型应用程序.因此,性能和安全性自然是一个问题.除此之外,表格验证也是一个主要标准.为了安全起见,我计划对所有Sql查询使用参数绑定.为了验证,我想使用Yii提供的验证器,而不是自己推出验证器.我知道性能会受到CActiveRecord的影响.所以我打算为我的所有表创建Cmodel类,在这些相应的模型中定义验证规则,并定义执行sql查询以检索和插入数据的函数.我在网站上的所有数据收集主要是通过表格(约95%),如果我使用Cformmodel,我真的不明白Cmodel和Cformmodel之间的区别,使用它们是否有任何性能损失.
另外为了防止XSS攻击,我想使用HTML purify包装器作为验证规则,因为我几乎到处读到性能对这个包装器不好的情况,即使我将它用作验证规则,它会不会很糟糕?我是否应该使用Chtml :: Encode显示输出文本,即使我正在净化输入?
我处理数据的粗略计划是:
$users= new Users() ; //Users is extending CModel , contains validation rules
$users=getdata(Yii->app->userid()) ;
if(isset('update'))
{
if($users->validate())
{$users->updatedata() ; }
}
$this->render('users','data'=>$users)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Yii在命令行上运行命令.我的方法需要一个模型,但是当我运行命令时,Yii说模型不存在,好像它没有自动加载它.我的课很简单:
class ImportCommand extends CConsoleCommand {
public function actionIndex() {
}
public function actionImport() {
ini_set("display_errors", 1);
set_time_limit(0);
$cores = Core::model() -> findAll(array('limit' => 300000));
foreach($cores as $core) {
$core -> syncLocation();
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误消息如下所示:
./yiic import import
PHP Warning: PHP Startup: Unable to load dynamic library '/opt/local/lib/php/extensions/no-debug-non-zts-20090626/php_xsl.dll' - dlopen(/opt/local/lib/php/extensions/no-debug-non-zts-20090626/php_xsl.dll, 9): image not found in Unknown on line 0
PHP Error[2]: include(Core.php): failed to open stream: No such file or directory
in file /Users/dixond/Sites/nevada/yii/framework/YiiBase.php at line 421
#0 /Users/dixond/Sites/nevada/yii/framework/YiiBase.php(421): …Run Code Online (Sandbox Code Playgroud) 这是我的用户表结构:
+----------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------+------+-----+---------+----------------+
| ID | int(10) unsigned | NO | PRI | NULL | auto_increment |
| screen_name | varchar(20) | NO | UNI | NULL | |
| slug | varchar(20) | NO | | NULL | |
| email | varchar(50) | NO | UNI | NULL | |
| pass | varchar(32) | YES | | NULL | |
| signin_twitter | enum('T','F') …Run Code Online (Sandbox Code Playgroud) 我有一个Yii模型将使用(稍后)多个数据库,表前缀将基于代码.
例如:
AMI_tablename,BMI_ AMI_tablename等
这些所有表都相同但在不同的数据库中.
我想知道如何在运行时向Yii模型提供动态表名?
我尝试使用setter函数,但父类CActiveRecord给出了一个错误,因为它没有从子模型类中获取值.
所以这是我的模型代码(只有我有问题的部分)
class RevShareModel extends CActiveRecord
{
public $prefix;
public static function model($className=__CLASS__)
{
return parent::model($className);
}
/**
* @return string the associated database table name
*/
public function tableName()
{
return $this->prefix . '_revshare_model';
}
Run Code Online (Sandbox Code Playgroud)
现在在我的控制器的某个地方
$obj = RevShareModel::model();
$obj->prefix ="BMI";
$obj->tableName();
$obj->findByPk(1);
exit;
Run Code Online (Sandbox Code Playgroud)
但我得到的错误是:
CDbException
The table "_revshare_model" for active record class "RevShareModel" cannot be found in the database.
C:\wamp\www\framework\db\ar\CActiveRecord.php(2264)
Run Code Online (Sandbox Code Playgroud)
好像当CActiveRecord调用tableName()方法时,它不会获得$前缀.
我是Yii框架用户.
我主要在我的模型文件中将函数定义为公共静态函数,如下面的示例函数.
public static function getTrashedPostCount(){
$connection=Yii::app()->db;
$sql = "SELECT COUNT(publish_status)
FROM {{post}}
WHERE publish_status = 'trash'";
$command=$connection->createCommand($sql);
$postCount = $command->queryScalar();
return $postCount;
}
Run Code Online (Sandbox Code Playgroud)
我想知道我做错了.
模型文件中的大多数函数应该是静态函数吗?
如果我正在做或理解错误,请告诉我.
谢谢!!!
yii ×10
yii-cmodel ×10
php ×9
command-line ×1
mysql ×1
templates ×1
yii-chtml ×1
zii-widgets ×1