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 № 1Zastosuj 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();