Różnica między setData () a addData ()

15

Jaka jest różnica między setData()i addData()? Czy istnieje połączenie, jeśli zaktualizuję produkt lub ustawię nowy?

użytkownik1240207
źródło

Odpowiedzi:

32

setDataprzesłania istniejące dane i może otrzymać jako parametr albo parę klucz-wartość albo tablicę.
jeśli ustawisz jako parametry, wówczas para klucz-wartość stanie $_data[key]się value. Jeśli ustawisz jako parametr, tablica $_datastaje się tablicą, która zastępuje to, co poprzednio zawierała.
Przykład:

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

wywoływanie $obj->setData('k3','v3')wyników w

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

wywoływanie $obj->setData(array('k3'=>'v3'))wyników w

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

wywoływanie $obj->setData('k2','v2000')wyników w

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

wywoływanie $obj->setData(array('k2'=>'v2000'))wyników w

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

addData otrzymuje jako parametr tylko tablicę i łączy tę tablicę z istniejącymi danymi.

Przykład:

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

wywoływanie $obj->addData(array('k3'=>'v3'))wyników w

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

ale wywoływanie $obj->addData(array('k2'=>'v2000'))powoduje

$_data = array('k1' => 'v1' , 'k2' => 'v2000');
Marius
źródło
co się wtedy stanie $obj->setData('k2'=>'v2399393')? :-) (świetnie, jeśli dodasz ten konkretny punkt w swojej odpowiedzi)
Rajeev K Tomy
@RajeevKTomy. Gotowy.
Marius
Przepraszam, mogę cię zagłosować tylko raz :-)
Rajeev K Tomy
twoja aktualizacja jest inna. Pominąłeś powyższą prośbę. Zapytałem $obj->setData('k2'=>'v2399393')i nie$obj->setData(array('k2'=>'v2000'))
Rajeev K Tomy
@RajeevKTomy. Czy to żart?
Marius
7

setData ()

funkcja jest only set one field value on one call. może set multiple field value using multiple call of setData function.

Funkcja addData () toset multiple field values using array with array key as field index.

Przykład:

Chcesz ustawić dwa pola w obiekcie.

  • pole a> Wartość-> X
  • pole b> Wartość-> Y

Jeśli używam setData(), musisz wykonać tego typu prace. Potrzebne Dla dwóch pól musisz wywołać funkcję setData dwa mądre.

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

Ale jeśli używam, addData()możesz to zrobićarray key as field name

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

$ObVarien->addData($Data)

addData () i setData () to dwie biblioteki Varien_Object funkcje klasy .

addData () przy użyciu setData () w pliku lib dla ustawienia wartości pola za pomocą pętli.

public function addData(array $arr)
{
    foreach($arr as $index=>$value) {
        $this->setData($index, $value);
    }
    return $this;
}
Amit Bera
źródło
4
Możesz użyć, setDataaby ustawić więcej niż jedno pole za pomocą jednego połączenia.
Marius
@Marius mam sprawdzić klasę lib. a ty odpowiadasz jaśniej niż ja
Amit Bera