У мене є дві таблиці (моделі), в одній зі стовпцем json, який може містити ідентифікатор в іншій таблиці. Я хочу приєднатись до цих двох разом, як я ланцюжок laravel приєднатися до мого запиту.
Відповіді:
1 для відповіді № 1Застосуйте логіку JSON всередині запиту приєднання, наприклад:
Post::select("posts.id", "posts.field1","posts.field2","samples.id as sample_id", ..)
->join("samples", "posts.json_col_name.id", "=", "samples.id")
->get();
Переконайтесь, що ви не створюєте конфлікту для конструктора запитів під час вибору стовпців (використовуйте field_name as another_name
) коли обидві моделі мають поля із загальною назвою.
0 для відповіді № 2
Тож виявляється, що з'єднання не працювало, тому щостовпець json зберігав поле id як рядок, а ідентифікатор id об'єднаної таблиці зберігається як ціле число. Кастинг результату в ціле число зафіксовано це. Нехай "s say table" a "- це перша таблиця, яка містить стовпчик json з ідентифікатором другої таблиці, яка є таблицею" b ". Так я і зробив.
DB::table("a")->join("b","b.id",DB::Raw("CAST(a.data->"$.id" AS UNSIGNED)"))->get();