값 배열이 들어있는 JSON 필드를 쿼리하려고합니다. 예를 들어 표의 이름은 "사용자"이고 필드는 "친구"입니다. ID가 3 같음이있는 곳JSON 배열을 포함하는 JSON 필드에서 Laravel 5.4 쿼리 만들기
[{
"id": 1,
"img": "img-1.jpg",
"name": "Name 1"
},
{
"id": 2,
"img": "img-2.jpg",
"name": "Name 2"
},
{
"id": 3,
"img": "img-3",
"name": "Name 3"
}]
그래서 내가하고 싶은 것이 친구 필드에서 사용자 테이블 쿼리 모두에 입니다 : 여기처럼 친구 필드가 보이는 방법입니다.
그래서 뭔가 같은 :
{
"id": 1,
"img": "img-1.jpg",
"name": "Name 1"
}
절망, 그리고 나는 그것이 매우 아니다 알면서도 :의 exemple 위 그냥했다 그래서 만약 필드, 배열을 포함하지 않은 경우 완벽하게 작동 물론 User::where('friends->id', 3)->orderBy('id', 'desc')->get();
논리적으로, 나는 "whereIn"을 시도했다 : User::whereIn('friends->id', [3])->get()
. 또는 : User::where('friends->[0]->id', 3)->get()
, User::where('friends->[*]->id', 3)->get()
, User::where('friends->*->id', 3)->get()
.
또한 JSON_CONTAINS 또는 JSON_SEARCH으로 시도 : User::whereRaw('JSON_CONTAINS(friends->"$.id", "3")')->get()
및 다양한 변종하지만 아무것도를하지 않습니다.
여기에 오기 전에이 문제에 대한 몇 가지 흥미로운 기사 (아래 목록에 나와 있습니다)를 읽었지만 MySQL 데이터베이스에 JSON 배열을 저장 한 유일한 사람인 것처럼 보입니다. 어떻게 가능합니까? 그래서 만약 누군가가 나에게 내가 정말 감사하겠습니다이 문제를 해결하는 데 도움이 될 수 ^^
- https://mattstauffer.com/blog/new-json-column-where-and-update-syntax-in-laravel-5-3/
- https://themsaid.com/laravel-mysql-json-colum-fast-lookup-20160709
http://www.qcode.in/use-mysql-json-field-in-laravel/. 사이드 노트 : 현재 MySQL 버전은 5.7.11이므로 JSON 필드를 지원하고 Laravel이 오류를 발생시키지 않고 그냥 빈 배열을 반환합니다.
당신은 선생님, 방금 내 하루를 보냈습니다! 고맙습니다. ** 두 가지 솔루션이 모두 작동합니다 **, 좀더 우아하고 더 많은 JSON과 비슷한 것을 찾고 나만 json 메서드 만 호출하면 후자를 사용하게 될 것입니다. 매우 정직하지만 완전한 대답에 다시 한 번 감사드립니다. –