2017-12-20 4 views
0

laravel을 사용하여 데이터베이스에서 데이터를 가져 오려고했습니다. Where JSON. 하지만 오류가 발생합니다. 나는 이와 같은 데이터를 추가했다.여기서 JOSN은 오류를 발생시킵니다. SQLSTATE [42000] : MariaDB 서버에 해당하는 설명서를 확인하십시오.

$event = new Event; 
$event->scores = json_encode([['user_ids' => [1,2,3,4],'score' => 15]]); 
$event->save(); 

데이터베이스의 데이터를 반환하고 싶습니다.

Event::where('scores->score',15)->get() 

이 오류를 표시합니다 :

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '>'$."score"' = ?' at line 1 (SQL: select * from `events` where `scores`->'$."score"' = 15)

내 MariaDB 버전은 다시 당신이 요구하는 무엇인지에 꽤 혼란 10.2.1

+0

그럼 우선 . .. '예기치 못한 문법 오류,', '', 'or') 기대 ' – ficuscr

+0

아우, 나는 그것을 고쳤다. ta가 추가되었지만 오류가 발생합니다. –

+1

그리고'Event :: where ('scores', 15) -> get() '을 시도하면 – Hackerman

답변

1

배열 & JSON 주조 당신이

를 추가 할 필요가 귀하의 이벤트 모델에

0

class Event extends Model { 
     protected $casts = ['scores'=>'array']; 
// ... 
} 

다음

$event = new Event; 
// you had what appeared to be an extra array, that could cause the issue? 
$event->scores = ['user_ids' => [1,2,3,4],'score' => 15]; 
$event->save(); 

그런 다음 데이터가 자동으로 긴 열 유형이 TEXT 또는 JSON (MySQL의 새로운 버전의)와 같이 JSON으로 저장 될 데이터를 저장. Laravel 문서에

참조 배열 & JSON 주조 :

https://laravel.com/docs/5.5/eloquent-mutators#array-and-json-casting 그런 다음 검색 : 여기

Event::where('scores->score', '15')->get(); 

는 JSON에 대한 관련 문서 인 경우 절 https://laravel.com/docs/5.5/queries#json-where-clauses

0

입니다. 테이블의 구조 또는 예상되는 SQL의 모양을 확인하는 데 도움이 될 수 있습니다.

당신이 테이블에 저장된 JSON의 문자열 내부에 포함 된 값을 기반으로 행을 반환하려는 경우 ... 그럼 당신은 같은 것을 할 필요가 ...

->whereRaw("JSON_CONTAINS(score, '[15]')")->get(); 

또는 그 라인을 따라 뭔가. .. https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

+0

빈 값을 반환합니다. –

+0

Laravel로이를 수행하는 방법에 대해 더 자세히 이야기 할 수 없다면 원하는 결과를 반환하는 원시 SQL을 표시하십시오. – ficuscr

+0

그냥'[]'를 반환합니다. –