Tak dla potomnych bo może się komuś kiedyś przyda albo i nie.
Przykładowo, chcesz zrobić tabele z ustawieniami, możesz zrobić to oczywiście dodając dodatkowe pola do tabeli, w ten sposób masz czasem bardzo dużo pól w tabeli, ale jeśli tak ci pasuje bo może tych pól, nie będzie znowu tak wiele to ok. Przy aktualizacji tylko trzeba albo puścić migrację albo sql aktualizującą tabele.
Przykład tabeli
Id | 2fa_auth | notifi_by_email | notify_by_sms | .... | kolejne_pole
---------------- | -------------------
1 | 1 | 0 | 1 | .... | kolejna zmienna
**Przykład drugi** Innym rozwiązaniem jest stworzenie tabeli typu `klucz => wartość` banalne
Id | key | value
---------------- | -------------------
1 | 2fa_auth | 1
2 | notifi_by_email | 1
3 | notify_by_sms | 0
4| .... | ...
25| kolejny_klucz | kolejna wartość
Aby pobrać sobie w eloquencie takie zapytanie, które zmieni nam tabele w tablicę wartość => klucz
można użyć
$res = Settings::all()->pluck('value', 'key')->all()
A taki będziemy mieli wynik
array:3 [▼
"2fa_auth" => "1"
"notifi_by_email" => "1"
"notify_by_sms" => "1"
]
echo $res['2fa_auth'];
**Przykład trzeci** Czasem zachodzi taka potrzeba, że chcemy w tabeli takiej trzymać dodatkowe informacje jak np stan takiej zmiennej, czy czas do jej dezaktywacji. Wtedy rozszerzymy tabele o kolejne pola:
Id | key | value | state | deactivate_date_at
---------------- | -------------------
1 | 2fa_auth | 1 | null | null
2 | notifi_by_email | 1 | 1 | 1970-01-01 12:00:00
3 | notify_by_sms | 0 | null | null
4| .... | ... | |
25| kolejny_klucz | kolejna wartość | |
Teraz aby wyciągnąć takie dane wystarczy użyć
$res = Settings::all()->keyBy('key');
Teraz mamy dostęp przez wskazanie klucza i jeśli chcemy dostać się do wartości state
w kluczu notifi_by_email
piszemy
$res = Settings::all()->keyBy('key');
echo $res['notifi_by_email']['state']
wynik całości
#items: array:3 [▼
"2fa_auth" => [
"id" => 1
"key" => "2fa_auth"
"value" => 1
"state" => null
"deactivate_date_at" => null
]
"notifi_by_email" => [
"id" => 1
"key" => "notifi_by_email"
"value" => 1
"state" => 1
"deactivate_date_at" => "1970-01-01 12:00:00"
]
"notify_by_sms" => [
"id" => 1
"key" => "notify_by_sms"
"value" => 0
"state" => null
"deactivate_date_at" => null
]
]
I tym łatwym sposobem bez żadnych array_mapper i innych cudów możemy osiągnąć zamierzony efekt.
Take it easy :)