エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Laravel】getXxxAttributeに対するpluckの挙動【784日目】

pluckで、独自フィールドを使いたい

public function getDisplayUsernameAttribute()
{
    return $this->nickname ?? $this->username;
}

こんな感じに、display_usernameという値を使いたい。
ニックネームがなければ、ユーザーネームを出すという挙動。

これに対して、pluck(lists)をしてみたい。
これを使ったpluckって出来るのかな?ってことで試してみる。

結果

$user->lists('display_username', 'id')

実は動く。

なんで動く?

なぜかは、内部では該当インスタンスの値を配列に入れる際に、フィールド値を指定して取得をする。

$this->display_username

みたいにフィールドを呼び出して、配列に突っ込んでいく

すると、getDisplayUsernameAttribute関数が起動するので、想定した値を配列に加えられる。