6

私はCakephpの初心者なので、データベースクエリを実装するのが難しいと感じています..私が欲しいのは、電子メールがユーザーが与えたものと等しい携帯電話番号を更新したい..これは私が実装したいクエリです

        "Update Users set  mobileNo = $mobileNo  where email = $email"

私はこれをやっています

      $mobileNo = $data['mobileNo'];
        $email = $data['$email'];


        $count = $this->User->find('count', array(
            'conditions' => array('User.email' => $email)));

        if($count>0){

            $email = $this->User->field(
                'email',
                array('User.mobileNo' => $mobileNo));
            echo $email;

            $this->User->saveField("mobileNo",$mobileNo);
4

1 に答える 1

17

通常、CakePHP での更新はすべて、編集したいレコードの主キーを知ることに基づいています。

ノーマル/シンプル

単一のフィールドを更新する例は次のとおりです。

$this->User->id = $this->User->field('id', array('email' => $email));
if ($this->User->id) {
    $this->User->saveField('mobileNo', $mobileNo);
}

これにより、次のクエリが生成されます (一部のカウントは省略されています)。

SELECT id from users where email = "$email"
UPDATE users set mobileNo = "$mobileNo" where id = <id>

アトミック

ただし、 updateAllを使用して、質問に表示されるのとまったく同じクエリを実行できます。

$this->User->updateAll(
    array('mobileNo' => "'$MobileNo'"),
    array('email' => $email)
);

これにより、次のクエリが生成されます。

UPDATE users set mobileNo = "$mobileNo" where email = "$email"

updateAll を使用する場合は、更新が sql フラグメントであると予想されることに注意してください。つまり、文字列を引用する必要があります。

于 2013-06-26T09:47:47.350 に答える