Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii PHP:数据库-基于首选项获取列条目的正确方法_Php_Database_Yii_Preferences_Names - Fatal编程技术网

Yii PHP:数据库-基于首选项获取列条目的正确方法

Yii PHP:数据库-基于首选项获取列条目的正确方法,php,database,yii,preferences,names,Php,Database,Yii,Preferences,Names,例如,对于这样的结构,列是: 第一名|第二名|中间名|姓 现在,假设我有一个表单,需要输入一个“名称”。但没有指定名称的类型 在控制器上,我必须检查“名称”是否在数据库中 我是这样做的: public function actionCheckName($name){ $name = PersonName::model()->findByAttributes(array('first_name'=> $name)); //then check if the name exists i

例如,对于这样的结构,列是:

第一名|第二名|中间名|姓 现在,假设我有一个表单,需要输入一个“名称”。但没有指定名称的类型

在控制器上,我必须检查“名称”是否在数据库中

我是这样做的:

public function actionCheckName($name){

$name = PersonName::model()->findByAttributes(array('first_name'=> $name));
//then check if the name exists in the first_name column

if(!empty($name)){
$name = PersonName::model()->findByAttributes(array('second_name'=> $name));
}
//if it's not in the first_name column...check in the second_name column

..
..and so on, i hope you get the idea

}
我基本上不知道用户是否输入了什么类型的名称。。。但是我必须在数据库中检查条目是否存在..是否在这些名称类型中


上面的代码是有效的,但是看起来有点不太好。。有更好的方法吗?非常感谢

我想你可以使用这样的标准

        $criteria=new CDbCriteria;
        $criteria->compare('first_name', $name, false, 'OR'); // The 3th param determine if the string comparation use "LIKE" or "="
        $criteria->compare('second_name', $name, false, 'OR');
        $criteria->compare('middle_name', $name, false, 'OR');
        $criteria->compare('last_name', $name, false, 'OR');

        $nameList = PersonName::model()->findAll($criteria); // Return all PersonName with $name in any field.

        $name = PersonName::model()->find($criteria); // Return the first PersonName with $name in any field.
$q = new CDbCriteria( array(
'condition' => "first_name LIKE ':first_name%' || last_name LIKE ':lname%'... and so on",     
'params'    => array(':first_name' => $fname,':lname'=>$lname .. and so on)
))


我想你可以用这样的标准

$q = new CDbCriteria( array(
'condition' => "first_name LIKE ':first_name%' || last_name LIKE ':lname%'... and so on",     
'params'    => array(':first_name' => $fname,':lname'=>$lname .. and so on)
))


您是否需要找到在任何列中有$nombre的人?您是否需要找到在任何列中有$nombre的人?此代码工作完美…但是,我有一个后续问题…是否有方法知道是否接受了什么名称类型?我是说如果是第一个匹配的名字。。或者第二个名字……等等?我可以知道吗?您可以在$criteria->select上使用'if'条件(“t.*,if(first_name'$name','first_name',if(second_name='$name','second_name',…..,与其余字段相同))'onField';这是一些粗俗的方法,但它可以帮助您..并在PersonName模型上添加'onField'属性,以便阅读。此代码工作正常…但是,我有一个后续问题…是否有方法知道是否接受了什么名称类型?我是说如果是第一个匹配的名字。。或者第二个名字……等等?我可以知道吗?您可以在$criteria->select上使用'if'条件(“t.*,if(first_name'$name','first_name',if(second_name='$name','second_name',…..,与其余字段相同))'onField';这是一些粗俗的方法,但它可以帮助您..并在PersonName模型上添加'onField'属性,以便阅读。有没有办法知道接受的名称类型?如果第一个或最后一个名称匹配?是的,还有一种方法可以知道接受了哪个名称,这将对数据库的查询速度产生影响。要搜索的列越少,搜索速度越快。如何知道接受的名称类型我怎么知道,从程序上说,是匹配的名字还是姓氏?有没有办法知道接受的名字类型?如果第一个或最后一个名称匹配?是的,还有一种方法可以知道接受了哪个名称,这将对数据库的查询速度产生影响。要搜索的列越少,搜索速度越快。如何知道接受的名称类型从程序上来说,我怎么知道匹配的是姓还是名?