setData()とaddData()の違い


15

違いは何だsetData()とはaddData()?製品を更新するか、新しい製品を設定する場合、接続はありますか?

回答:


32

setData既存のデータを上書きし、パラメーターとしてキーと値のペアまたは配列を受け取ることができます。
パラメータとしてキーと値のペアを設定すると、に$_data[key]なりvalueます。パラメータとして設定する$_dataと、配列は以前の配列を上書きする配列になります。
例:

$_data = array('k1' => 'v1' , 'k2' => 'v2');

呼び出し$obj->setData('k3','v3')結果

$_data = array('k1' => 'v1' , 'k2' => 'v2', 'k3'=>'v3');

呼び出し$obj->setData(array('k3'=>'v3'))結果

$_data = array('k3'=>'v3');

呼び出し$obj->setData('k2','v2000')結果

$_data = array('k1' => 'v1' , 'k2' => 'v2000')

呼び出し$obj->setData(array('k2'=>'v2000'))結果

$_data = array('k2'=>'v2000');

addData パラメータとして配列のみを受け取り、その配列を既存のデータとマージします。

例:

$_data = array('k1' => 'v1' , 'k2' => 'v2');

呼び出し$obj->addData(array('k3'=>'v3'))結果

$_data = array('k1' => 'v1' , 'k2' => 'v2', 'k3'=>'v3');

しかし、呼び出す$obj->addData(array('k2'=>'v2000'))

$_data = array('k1' => 'v1' , 'k2' => 'v2000');

私たちが行うときに何が起こる$obj->setData('k2'=>'v2399393')、その後?:
ラジェエフKトミー

@RajeevKTomy。できた
マリウス

申し訳ありませんが、一度だけ投票できます:
ラジェエフKトミー

アップデートが異なります。上記のリクエストをスキップしました。私は尋ねましたが$obj->setData('k2'=>'v2399393')、そうではありません$obj->setData(array('k2'=>'v2000'))
ラジーエフKトミー

@RajeevKTomy。これは冗談ですか?
マリウス

7

setData()

関数はonly set one field value on one callです。それができset multiple field value using multiple call of setData functionます。

addData()関数はset multiple field values using array with array key as field index.

ちょうど例:

オブジェクトに2つのフィールドを設定する必要があります。

  • フィールドa> Value-> X
  • フィールドb>値-> Y

私が使用している場合、setData()このタイプのworks.needを行う必要があります2つのフィールドでは、setData関数を2回呼び出す必要があります。

$ObVarien->setData('fieldA',$X);
$ObVarien->setData('fieldB',$Y);

しかし、私が使用しているaddData()場合、あなたはこれを行うことができますarray key as field name

$Data=array('fieldA'=>$X,'fieldb'=>$Y)

$ObVarien->addData($Data)

addData()のsetData()は 2つのライブラリです Varien_Objectクラスの関数。

addData()ループを使用して、設定されたフィールド値のためのlibファイルでのsetData()を使用しました。

public function addData(array $arr)
{
    foreach($arr as $index=>$value) {
        $this->setData($index, $value);
    }
    return $this;
}

4
あなたは使用することができますsetData一度のコールで複数のフィールドを設定します。
マリウス

@Marius私はlibクラスをチェックしました。あなたは私よりも明確に答えます
アミットベラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.