Laravel - wyszukiwanie po id w taeli

0

Hej, mam tabelę powiedzmy news i w niej pole arts_ids do którego zapisane są id w formacie JSON, przy zapisie po prostu robię json_encode() i zapisuję dane w tym polu. Teraz chciałbym wyszukiwać dane news na podstawie art_id, czyli mam jakieś art_id i po nim chciałbym filtrować news. Czy jest taka możliwość? Jeśli tak to jak to ogarnąć? Chciałbym uniknąć tworzenia nowej tabeli.

Dzięki :)

2

Jest coś takiego jak whereJsonContains
https://laravel.com/docs/8.x/queries#json-where-clauses
Ale to może spowolnić aplikację i jeśli masz inne wyjście pozbądź się takich wyszukiwań.

0

Funkcja JSON_EXTRACT() pozwoli Ci zrobić/dodać rawa do query i wyszukiwać.

https://database.guide/json_extract-return-data-from-a-json-document-in-mysql/

0

wygląda ok tylko nie wiem jak tego użyć. Mam w bazie kolumnę artists_ids i dane w niej są tak zapisane ["5","2","1"] i teraz mam id np 2. Jak zrobić where aby pobrać dane?

1

Spróbuj tak:

$q->whereJsonContains('artists_ids', [2]);

Pod spodem właśnie działa zapytanie do bazy oparte na dostępnych czy to w MySql czy Postgres funkcjach. Zawsze możesz zerknąć na wygenerowane zapytanie i zobaczyć jak działa.

0
michalos25 napisał(a):

Hej, mam tabelę powiedzmy news i w niej pole arts_ids do którego zapisane są id w formacie JSON, przy zapisie po prostu robię json_encode() i zapisuję dane w tym polu. Teraz chciałbym wyszukiwać dane news na podstawie art_id, czyli mam jakieś art_id i po nim chciałbym filtrować news. Czy jest taka możliwość? Jeśli tak to jak to ogarnąć? Chciałbym uniknąć tworzenia nowej tabeli.

Dzięki :)

Nie na tym polega relacyjna baza danych, zrob tak zeby tego uniknac i lepiej dodac pivota z relacjami news i artykuly 1 do wielu

1

@michalos25: Możesz jeszcze spróbować poprzez LIKE. Jeżeli masz w tabeli masz zapisane dane ["2", "5", "22"] to zapytanie:

$sqlEuery = 'SEARCH * FROM news WHERE arts_ids LIKE '%"'.$searchId.'"%';

Znajdzie Ci Twojego newsa

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