我是yii的新手,并且已经暂时停留在这个问题上一段时间了,所以如果它显而易见的话,请光临我!
我必须将名字看作是名字和姓氏的组合,即fname&的结尾。 lname并返回所有可能的匹配项。现在,通过查看into this post,我已经取得了很大的成功。
所以现在我有我的模型课,我在这里搜索学生名称:
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函数中搜索全名。
我已经为名称字段定义了一个变量,并指定了一个控制器来返回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
答案 0 :(得分:1)
您好像在使用StudentRegistration::model()->findAll($criteria)
而不是StudentRegistration::model()->search()
第一种方法将使用 $ criteria 信息查看您的模型表,并尝试匹配相关的表列。但* full_name *不是表列。
search()方法使用 $ this 作为过滤器。 $ this 是 StudentRegistration 实例,* $ this-&gt; full_name *是已知属性, search()知道如何处理它。
如果要添加更多过滤器,只需在用作过滤器的实例中设置相关属性即可。类似的东西:
$filter = new StudentRegistration();
$filter->setAttributes(array('full_name' => "John Doe", 'registration_date' => '2013-01-01'));
$results = $filter->search();
NB:,您可能希望使用CActiveRecord处理的大量分配,而不是 setAttributes(),只要您的所有输入都“安全搜索”: / p>
$filter->attributes = $my_array_of_parameters; // likely $_POST['something']
如果它们不“安全搜索”,请将setAttributes()的第二个参数设置为false。 或者使用 setAttribute() ...