gpt4 book ai didi

使用 CGridView、Yii 在 BELONGS_TO 模型列中搜索

转载 作者:行者123 更新时间:2023-12-04 23:31:15 24 4
gpt4 key购买 nike

我有一个用于类(class)模型的 CGridView 小部件

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'lesson-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,

...和类(class)与用户模型有关:
'user' => array(self::BELONGS_TO, 'User', 'user_id'),

...并且 CGridView 有一个列,其中包含来自上述 BELONGS_TO 模型的用户姓氏
'columns'=>array(
...
array(
'name' => 'user',
'header'=>'Teacher',
'value' => '$data->user->lastname',
),

因此,我无法在本专栏中使用 CGridView 进行 symply 搜索,但我需要它。

如何使用 CGridView 在“$data->user->secondname”中搜索?

我认为我应该在 Lesson 模型中扩展搜索方法,但是如何扩展?

现在它看起来像这样:
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.

$criteria=new CDbCriteria;

$criteria->compare('id',$this->id);
$criteria->compare('student',$this->student,true);
$criteria->compare('comment',$this->comment,true);

return new CActiveDataProvider(get_class($this), array(
'criteria'=>$criteria,
));
}

最佳答案

这应该有效,将其添加到 search() 方法中的搜索条件中:

$criteria->with[]='user';
$criteria->addSearchCondition("user.secondname",$this->user_id);

这就是我所做的:
if(!intval($this->user_id) && is_string($this->user_id) && strlen($this->user_id) > 0) {
$criteria->with[]='user';
$criteria->addSearchCondition("user.secondname",$this->user_id);
} else
$criteria->compare('t.user_id',$this->user_id);

这是 CGridView 定义:
'columns'=>array(
...
array(
'name' => 'user_id',
'header'=>'User',
'sortable'=>false, // since it would still be sorting based on ID
// 'value' => '$data->user->lastname', // basic version
'value'=>'CHtml::link((isset($data->user))?$data->user->username:$data->user_id,array("user/view","id"=>$data->user_id))', // link version
),

这是一个有趣的小技巧:如果搜索词是字符串而不是 intval(),它会通过“用户”关系按用户的第二名搜索用户。但是如果你输入一个 user_id,它会通过 user_id 找到用户——默认的 search() 功能。

注意:这将启用过滤,但仍将根据 ID 进行排序。您需要实现一些额外的东西才能使排序工作。

当然还有其他方法可以做到这一点,但这就是我的做法。我怀疑使用这种关系来做这件事是“正确的”,但我的技术很可靠。

关于使用 CGridView、Yii 在 BELONGS_TO 模型列中搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4855185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com