Différence entre setData () et addData ()


15

Quelle est la différence entre setData()et addData()? Existe-t-il une connexion si je mets à jour un produit ou en crée un nouveau?

Réponses:


32

setDataremplace les données existantes et peut recevoir en paramètre soit une paire valeur / clé soit un tableau.
si vous définissez des paramètres, une paire valeur-clé $_data[key]devient alors value. Si vous définissez comme paramètre un tableau $_datadevient ce tableau écrasant ce qu'il contenait auparavant.
Exemple:

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

l'appel $obj->setData('k3','v3')entraîne

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

l'appel $obj->setData(array('k3'=>'v3'))entraîne

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

l'appel $obj->setData('k2','v2000')entraîne

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

l'appel $obj->setData(array('k2'=>'v2000'))entraîne

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

addData reçoit en paramètre uniquement un tableau et il fusionne ce tableau avec les données existantes.

Exemple:

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

l'appel $obj->addData(array('k3'=>'v3'))entraîne

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

mais appeler $obj->addData(array('k2'=>'v2000'))résulte en

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

que se passe-t-il lorsque nous le faisons $obj->setData('k2'=>'v2399393')alors? :-) (super si vous ajoutez ce point spécifique dans votre réponse)
Rajeev K Tomy

@RajeevKTomy. Terminé.
Marius

Désolé, je ne peux vous voter qu'une seule fois :-)
Rajeev K Tomy

votre mise à jour est différente. Vous avez ignoré la demande spécifiée. J'ai demandé $obj->setData('k2'=>'v2399393')et non$obj->setData(array('k2'=>'v2000'))
Rajeev K Tomy

@RajeevKTomy. Est-ce une farce?
Marius

7

setData ()

la fonction est only set one field value on one call. c'est possible set multiple field value using multiple call of setData function.

La fonction addData () estset multiple field values using array with array key as field index.

Juste un exemple:

Vous souhaitez définir deux champs sur l'objet.

  • champ a> Valeur-> X
  • champ b> Valeur-> Y

Si setData()j'utilise, vous devez faire ce type de travaux. Besoin Pour deux champs, vous devez appeler la fonction setData à deux.

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

Mais si j'utilise addData()alors vous pouvez le fairearray key as field name

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

$ObVarien->addData($Data)

addData () et setData () sont deux Varien_Objectfonctions de classe Library .

addData () utilisant setData () dans le fichier lib pour définir la valeur du champ en utilisant la boucle.

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

4
Vous pouvez utiliser setDatapour définir plusieurs champs avec un seul appel.
Marius

@Marius j'ai vérifié la classe lib. et vous répondez plus clair que moi
Amit Bera
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.