Jak zamienic tabele klucz wartosc na tablice php laravel eloquent ?

1

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 :)

0

W sumie nie wiem co w tym rewolucyjnego. Standardowy zabieg, moim zdaniem

0

ja mam tylko takie kategorie
Screenshot 2021-11-13 at 11.21.35.png

0
masterc napisał(a):

Link mnie nie ratuje bo nie ma tego w menu, wiec nikt nie wie, to ze ty jestes tam moderatorem i masz opcje ktorych inni nie widza , to nie ma znaczenia. zwykly user jak ja tego nie widzi

Każdy to widzi przyjacielu.

Screenshot_20211113-131810_Chrome.jpg

Owszem, nie ma linka w menu, ale kategoria istnieje, podstrony istnieją, artykuły istnieją. To nie powód żeby wszczynać burdy. Rozumiem że Ci głupio że pomyślałeś że nie ma kategorii PHP, ale skoro już widzisz że jest, to już nie brnij :)

Możesz zgłosić buga ze nie ma wpisu w menu.

0

aaaaaa bo to sie wciska KOMPEDIUM guzik, ja myslalem ze jak najezdzam na forum i rozwijaja sie wszystkie kategorie a potem na forum i praca musze nacisnac, to jak najechalem na Kompedium to tez myslalem ze skoro sie rowija to nie ma wiecej kategorii. bardzo nieintuciyjne. powinniscie wywalic to rozwijane menu z kompedium albo zrobic wszystkie kategorie w nim jak po najechaniu na formum

@Adam Boduch co myslisz ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1