字符串查询中的PHP Yii MongoDB

字符串查询中的PHP Yii MongoDB,php,mongodb,yii,Php,Mongodb,Yii,我需要找到所有在字符串中包含特定电子邮件地址的学校 现在,我正在向我的数据库发送一个查询,以获得这样的学校列表 $aSchools = School::model()->findAllByAttributes(array( 'finished' => School::SCHOOL_CREATED, )); 在那之后,我写信给所有的学校,检查他们是否有这样的邮寄地址: $aFoundSChools = array(); foreach($aSchools as $oS

我需要找到所有在字符串中包含特定电子邮件地址的学校

现在,我正在向我的数据库发送一个查询,以获得这样的学校列表

$aSchools = School::model()->findAllByAttributes(array(
    'finished' => School::SCHOOL_CREATED,
));
在那之后,我写信给所有的学校,检查他们是否有这样的邮寄地址:

$aFoundSChools = array();
    foreach($aSchools as $oSchool)
    {
        if (strpos($oSchool->mailAddress, Yii::app()->user->mailAddress))
        {
            $aFoundSChools [] = $oSchool;
        }
    }
$query = array(
    'finished' => School::SCHOOL_CREATED,
    'mailAddress' => new MongoRegexp( '/' . addslashes( Yii::app()->user->mailAddress ) . '/' ),
);
但我猜这可能更干净,对吗?我可以像sql中的“like”查询那样在单个函数中实现吗?

MongoDB支持正则表达式形式的“like”查询。但请注意,这不能使用索引。从普通PHP中,您可以这样构造它:

$aFoundSChools = array();
    foreach($aSchools as $oSchool)
    {
        if (strpos($oSchool->mailAddress, Yii::app()->user->mailAddress))
        {
            $aFoundSChools [] = $oSchool;
        }
    }
$query = array(
    'finished' => School::SCHOOL_CREATED,
    'mailAddress' => new MongoRegexp( '/' . addslashes( Yii::app()->user->mailAddress ) . '/' ),
);
如果您认为您的邮件地址可能包含
/
,则必须使用addslashes

我不太了解Yii,但我希望您可以像这样使用
$query
,只是将您已经存在的测试替换为刚刚“完成”:

$aSchools = School::model()->findAllByAttributes( $query );