我试图从表中选择几行并在多个页面中进行渲染(分页).这是模型中的代码:
return new CActiveDataProvider('Downloads',
array(
'criteria' => array(
'select' => 'download_id,title,thumb_ext',
'order' => 'download_id DESC',
'limit' => $count,
),
'pagination' => array('pageSize' => 5,),
)
);
Run Code Online (Sandbox Code Playgroud)
在视图中,我使用CGridView显示它:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns' => array('download_id', 'title', 'thumb_ext'),
));
Run Code Online (Sandbox Code Playgroud)
问题是CActiveDataProvider忽略条件限制并返回表的所有行...
谢谢.
我是yii框架的首发.我只是想知道Yii在很多时候对很多在线用户有多大的可扩展性?
与其他框架相比,Yii有多大用处,如果有100,000个用户 - 让事情顺利进行 - 需要什么样的技术和托管等?
请考虑一下:
class User extends CActiveRecord
{
...
public function relations()
{
return array(
...
'articleCount' => array(self::STAT, 'Article', 'userid'),
...
);
}
...
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要创建一个$dataProvider = new CActiveDataProvider(...)to to to a CListViewwidget我想要添加articleCount到该属性,sortableAttributes以便我可以根据用户是作者的文章数量对User记录进行排序.
什么是最方便的方法?还有什么其他选择?
如何在Yii Framework中调用此方法:
$this->renderPartial(string $fileNameToRenderData, bool $wheaterToReturnOrEchoDirectly);
Run Code Online (Sandbox Code Playgroud)
静态地,像这样:
GodForbiddenClassName::renderPartial(string $fileNameToRenderData, bool $wheaterToReturnOrEchoDirectly);
Run Code Online (Sandbox Code Playgroud) 当我做
print_r(Yii::app()->request->baseUrl)
Run Code Online (Sandbox Code Playgroud)
我得到一个空字符串.Yii论坛上的帖子说默认为空白.如何更改其默认值以便我可以使用绝对URL?
我有以下型号:
User 列{id,user_name,password,user_type}
Admin 列{id,user_id,full_name,..... etc}
Editor 列{id,user_id,full_name,... etc}
关系是
User:'admin' => array(self::HAS_ONE, 'Admin', 'user_id'),'editor' => array(self::HAS_ONE, 'Editor', 'user_id'),
Admin : 'user' => array(self::BELONGS_TO, 'User', 'user_id'),
Editor : 'user' => array(self::BELONGS_TO, 'User', 'user_id'),
现在我fullName在UserModel中设置了一个虚拟属性,如下所示
public function getFullName()
{
if($this->user_type=='admin')
return $this->admin->full_name;
else if($this->user_type=='editor')
return $this->editor->full_name;
}
Run Code Online (Sandbox Code Playgroud)
我可以fullName在gridview中显示虚拟属性,但是如何在属性中添加过滤器并使其在gridview中可排序?
UPADTE 1:
我根据@Jon的答案更新了模型search()函数,如下所示
public function search()
{
$criteria=new CDbCriteria;
$criteria->select=array('*','COALESCE( editor.full_name,admin.first_name, \'\') AS calculatedName');
$criteria->with=array('editor','admin');
$criteria->compare('calculatedName',$this->calculatedName,true);
$criteria->compare('email',$this->email,true);
$criteria->compare('user_type',$this->user_type);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
} …Run Code Online (Sandbox Code Playgroud) 我几乎完成了一个PHP项目,使用MVC,jQuery和Ajax.这是纯PHP项目.我不知道代码中的任何框架.我想改变这一点.我发现,进行一些研究,结果证明Yii是最好的框架之一.
有可能以某种方式将纯PHP项目迁移到Yii吗?
如果是这样,那该怎么办?我应该遵循哪些步骤来减少工作量并享受Yii框架带来的好处?
我是Yii新手,任何见解都很受欢迎.
在Yii中,CGridView在行中有自己的背景颜色.但我想要做的是根据列之一的值突出显示特定行.
对于Instance,我有三列,id,name,status.现在,如果状态的值为Inactive或0,我应该用一些颜色突出显示该行.
我简要阅读了课程参考资料并搜索了这个网站.但找不到相关的解决方案.如果某些示例或某个方向朝向正确的解决方案,那将非常感激.
谢谢,Ujjwal
我试图使用以下代码在Yii中设置一些会话变量:
$session=new CHttpSession;
$session->open() ;
$session->setSessionName('My Session') ;
$session['sleep'] = 0 ;
$session['attempts'] = 0 ;
$session->writeSession('sleep','0') ;
$session['ip'] = $this->get_ip_address() ; $session->close() ; var_dump($session,$session['ip']) ;
Run Code Online (Sandbox Code Playgroud)
但是,我无法设置上面的会话变量,转储具有以下结果:
object(CHttpSession)#17 (5) { ["autoStart"]=> bool(true) ["behaviors"]=> array(0) { } ["_initialized":"CApplicationComponent":private]=> bool(false) ["_e":"CComponent":private]=> NULL ["_m":"CComponent":private]=> NULL } string(3) "::1"
Run Code Online (Sandbox Code Playgroud)
它将$ session和$ session ['ip']视为两个完全不同的变量.有人可以帮我解决这个问题吗?
我有两个staff带列的表id,name和attendance.staff_id用作attendance表中的外键.
我想在出勤gridview中显示员工姓名.
出勤模式:
public function getStaff()
{
return $this->hasOne(Staff::className(), ['id' => 'staff_id']);
}
public function getStaffName() {
return $this->staff->name;
}
Run Code Online (Sandbox Code Playgroud)
在index.php中我使用了这段代码
<?= GridView::widget([
[
'attribute'=>'staff_id',
'value'=>'StaffName',
],
]); ?>
Run Code Online (Sandbox Code Playgroud)
获得员工姓名的价值.通过这种方式,我成功获得了员工姓名但问题是,当我在gridview中搜索员工姓名时,它说"staff_id"应该是整数,因为我将其定义为整数,但在这里我想搜索员工的姓名而不是id .
这怎么可能 ?提前致谢
yii ×10
php ×7
activerecord ×1
call ×1
frameworks ×1
gridview ×1
instance ×1
mysql ×1
session ×1
static ×1
yii-routing ×1
yii2 ×1