【问题标题】:findAll() in yiiyii 中的 findAll()
【发布时间】:2023-03-12 18:09:01
【问题描述】:

电子邮件存档表:

id email_id to from
1  101      uk  msm
2  102      uu  avc
3  101      rk  uk
4  103      xyz abc
5  104      xyz poi
6  104      abc xyz
7  101      xyz abc

现在在 Yii 我想要记录其中 email_id=101 我正在使用下面的代码,但它不起作用。

$id =101;
$criteria = new CDbCriteria();
$criteria->addCondition("email_id < :email_id");
$comments = EmailArchive::model()->findAll($criteria, array(':email_id' => $id,));

【问题讨论】:

    标签: php yii yii-cactiverecord


    【解决方案1】:

    试试:

    $id =101;
    $comments = EmailArchive::model()->findAll(
    array("condition"=>"email_id =  $id","order"=>"id"));
    

    $id =101;
    $criteria = new CDbCriteria();
    $criteria->addCondition("email_id=:email_id");
    $criteria->params = array(':email_id' => $id);
    $comments = EmailArchive::model()->findAll($criteria);
    

    $Criteria = new CDbCriteria();
    $Criteria->condition = "email_id = $id";
    $Products = Product::model()->findAll($Criteria);
    

    【讨论】:

    • 很高兴知道它对您有用...您可以将答案标记为已接受...)
    • 为什么没有人只使用 find() 而不是 findAll() 如果它是一个单一的记录,请查看链接以供参考 yiiframework.com/doc/api/1.1/CActiveRecord#find-detail 我使用这样的东西; $social = Social::model()->find(array( 'have' => 'user_id=:user_id', 'params' => array( ':user_id' => $user_id, ) ));
    【解决方案2】:

    如果你使用findAll(),我建议你使用这个:

    $data_email = EmailArchive::model()->findAll(
                      array(
                          'condition' => 'email_id = :email_id',
                          'params'    => array(':email_id' => $id)
                      )
                  );
    

    【讨论】:

      【解决方案3】:

      只是添加一些替代品,你也可以这样做:

      $id =101;
      $criteria = new CDbCriteria();
      $criteria->condition = "email_id =:email_id";
      $criteria->params = array(':email_id' => $id);
      $comments = EmailArchive::model()->findAll($criteria);
      

      【讨论】:

      • $criteria->condition("email_id
      • @MarianZburlea 感谢您的更正。我已经更新了我的答案。
      【解决方案4】:

      在 yii 中使用 findall 的另一种简单方法

      $id =101; 
      $comments = EmailArchive::model()->findAll(array("condition"=>"':email_id'=$id"));
      foreach($comments as $comments_1) 
      { 
      echo  "email:".$comments_1['email_id'];
      }
      

      【讨论】:

        【解决方案5】:

        这是您最安全的方法:

        $id =101;
        //$user_id=25;
        $criteria=new CDbCriteria;
        $criteria->condition="email_id < :email_id";
        //$criteria->addCondition("user_id=:user_id");
        $criteria->params=array(
          ':email_id' => $id,
          //':user_id' => $user_id,
        );
        $comments=EmailArchive::model()->findAll($criteria);
        

        请注意,如果您注释掉被注释的行,您可以在搜索中添加更多过滤。

        在此之后建议检查是否有任何返回的数据,如:

        if (isset($comments)) { // We found some comments, we can sleep well tonight
          // do comments process or whatever
        }
        

        【讨论】:

          【解决方案6】:
          $id = 101;
          
          $sql = 'SELECT * FROM ur_tbl t WHERE t.email_id = '. $id;
          $email = Yii::app()->db->createCommand($sql)->queryAll();
          
          var_dump($email);
          

          【讨论】:

            【解决方案7】:

            如果你使用 $criteria,我建议使用 blow 用法:

            $criteria = new CDbCriteria();
            $criteria->compare('email_id', 101);
            $comments = EmailArchive::model()->findAll($criteria);
            

            【讨论】:

            • 如果您可以添加一些文本并解释您的代码的作用并解决问题,那就太好了。这样,更多的人会受益。
            【解决方案8】:

            使用下面的代码。这应该可以。

            $comments = EmailArchive::find()->where(['email_id' => $id])->all();
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-04-10
              • 1970-01-01
              • 2016-07-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多