/ / Laravel dołącz do dwóch tabel w Json Column - php, mysql, laravel

Laravel dołącz do dwóch tabel w Json Column - php, mysql, laravel

Mam dwie tabele (modele), jedną z kolumną json, która może zawierać identyfikator na innym stole. Chcę dołączyć do tych dwóch razem, w jaki sposób połączyć łańcuch laravel z moim zapytaniem.

Odpowiedzi:

1 dla odpowiedzi № 1

Zastosuj logikę JSON wewnątrz zapytania łączenia, jak:

Post::select("posts.id", "posts.field1","posts.field2","samples.id as sample_id", ..)
->join("samples", "posts.json_col_name.id", "=", "samples.id")
->get();

Upewnij się, że nie tworzysz konfliktu dla konstruktora zapytań podczas wybierania kolumn (użyj field_name as another_name), gdy oba modele mają pola o wspólnej nazwie.


0 dla odpowiedzi nr 2

Okazuje się, że połączenie nie działa, ponieważkolumna json przechowywała pole id jako ciąg znaków, a identyfikator połączonej tabeli jest przechowywany jako liczba całkowita. Przesłanie wyniku w liczbę całkowitą rozwiązało to. Powiedzmy, że tabela "a" jest pierwszą tabelą, która zawiera kolumnę json z identyfikatorem na drugiej tabeli, która jest tabelą "b". Tak zrobiłem.

DB::table("a")->join("b","b.id",DB::Raw("CAST(a.data->"$.id" AS UNSIGNED)"))->get();