(2019/03/30 追記)
本家、日本語版とも修正が行われましたのでもうこの問題はありません。
LaravelのヘルパーのArr::add
は以下のようにマニュアルに書いてあります
Arr::add
メソッドは指定されたキー/値のペアをそのキーが存在していない場合、配列に追加します。
「キーが存在していない場合」といったら普通はarray_key_exists
やArr::has()
のように値によらずキーがあるかないかだけの意味だと思うのですが、実はキーが存在していても値がnullだった場合は新しい値に更新されるのでした。
>>> Arr::add(['price' => null], 'price', 100)
=> [
"price" => 100,
]
ということでmemcachedのaddみたいな動作を期待すると裏切られます。気をつけましょう。
いちおうPRは出してみました(https://github.com/laravel/docs/pull/5064)
(追記)
PRは文章が長かったか英語がイマイチだったので採用されませんでしたが問題は理解していただけたようででこちらのコミットで以下のように修正されました(HelpersのArr::add)。
The Arr::add method adds a given key / value pair to an array if the given key doesn't already exist in the array or is set to null:
use Illuminate\Support\Arr;
$array = Arr::add(['name' => 'Desk'], 'price', 100);
// ['name' => 'Desk', 'price' => 100]
$array = Arr::add(['name' => 'Desk', 'price' => null], 'price', 100);
// ['name' => 'Desk', 'price' => 100]
(2019/03/30 追記)
こちらのコミットで日本語版にも反映されました。
Arr::add
メソッドは指定されたキー/値のペアをそのキーが存在していない場合とnull
がセットされている場合に、配列に追加します。