Yii搜索自定义字段

aamkag61  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(186)

我必须查找名字和姓氏的组合,即fname & lname的concat,并返回所有可能的匹配项。现在,我已经能够通过查找x1e0 f1.成功地完成这项工作。
现在我有了一个模型类,我可以在其中搜索学生姓名,如下所示:

class StudentRegistration extends CActiveRecord
{

    /**
     * Public Varibale that defines the full name 
     */

     public $full_name;

     //my search function has something like this
     public function search()
     {
          $criteria=new CDbCriteria;
          $criteria->addSearchCondition('concat(fname, " ", lname)', $this->full_name); 
     .
     .
     .

     //my rules defining this
     full_name', 'safe', 'on'=>'search'),

    //my getter method like this
    public function getFull_Name()
    {
            return $this->fld_fname.' '.$this->fld_lname;
    }

}

使用这种结构,我已经能够将全名属性添加到我的视图中,并且能够在我的表单视图中搜索全名。
现在,我完全被难住了,我试图访问我定义的搜索条件,在另一个视图中使用不同的模型搜索 AJAX 函数的全名。
我在这里为name字段定义了一个变量,并分配了一个控制器来返回studentReg模型搜索的搜索结果。但是我没有成功(如果我设置断点来抱怨监视存在,我的netbeans/xdebug会毫不客气地崩溃,而我却没有)
这是我的搜索操作类

class StudentRegChecklistController extends Controller
  {
      .
      .
      .
      .
      .
        public function actionSearchStudent()
        {
        if(Yii::app()->request->getIsAjaxRequest() && isset($_POST["autoField"]))
        {
            $models=  StudentSearch::searchStudent($_POST["autoField"]);                
            $criteria=new CDbCriteria;
            $criteria->compare("full_name",$_POST["autoField"],true);
            $models=  StudentRegistration::model()->findAll($criteria);
            foreach($models as $model)
            {
              echo "<option value=$model->gno style=\"font-size:18px;cursor:pointer\">".$model->fname." ".$model->lname."</option>";
              echo "</br>";
            }
        }

我在控制器中做错了什么?试图实现一些like this

w1e3prcc

w1e3prcc1#

看起来您使用的是StudentRegistration::model()->findAll($criteria),而不是StudentRegistration::model()->search()
第一种方法将使用 $criteria 信息查看模型表,并尝试匹配相关的表列。但 full_name 不是表列。

  • search()* 方法使用 $this 作为过滤器。$this 是一个StudentRegistration示例,$this-〉full_name 是一个已知属性,search() 知道如何处理它。

如果你想添加更多的过滤器,只需在你用作过滤器的示例中设置相关的属性即可。

$filter = new StudentRegistration();
$filter->setAttributes(array('full_name' => "John Doe", 'registration_date' => '2013-01-01'));
$results = $filter->search();

**注意:**如果您的所有输入都是“可安全搜索的”,则您可能希望使用由CActiveRecord处理的大量赋值,而不是 setAttributes()

$filter->attributes = $my_array_of_parameters; // likely $_POST['something']

如果它们不是“可安全搜索的”,请将setAttributes()的第二个参数设置为false。或者使用 setAttribute()...

相关问题