source

여기서 Larabel의 JSON은 SQLSTATE[42000] 오류를 나타냅니다.MariaDB 서버에 해당하는 매뉴얼 확인

factcode 2022. 9. 27. 23:46
반응형

여기서 Larabel의 JSON은 SQLSTATE[42000] 오류를 나타냅니다.MariaDB 서버에 해당하는 매뉴얼 확인

Larabel Where JSON을 사용하여 데이터베이스에서 데이터를 가져오려고 했습니다.하지만 그것은 오류를 준다.이렇게 데이터를 추가했습니다.

$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 ]:구문 오류 또는 액세스 위반: 1064 SQL 구문에 오류가 있습니다. 사용 중인 MariaDB 서버 버전에 해당하는 설명서에서 줄 1에서 '>'$"score' = ?' 근처에서 사용할 올바른 구문을 확인하십시오(SQL: 여기서 'sql'에서 *를 선택하십시오. 여기서 'sql'->'$score' = 15)

My MariaDB 버전은 10.2.1입니다.

어레이 및 JSON 캐스팅

이벤트 모델에서 다음을 추가해야 합니다.

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의 Array & JSON 캐스팅을 참조해 주세요.https://laravel.com/docs/5.5/eloquent-mutators#array-and-json-casting

다음으로 검색:

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

다음은 JSON Where 조항 https://laravel.com/docs/5.5/queries#json-where-clauses 관련 문서입니다.

다시 한 번, 당신이 무엇을 물어보는지에 대해 꽤 혼란스럽군요.테이블의 구조나 예상 SQL의 모양을 확인하는 데 도움이 될 수 있습니다.

테이블에 저장된 JSON 문자열에 포함된 값을 기준으로 행을 반환하려고 할 경우...그럼 이렇게...

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

아니면 그런 식으로...https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

언급URL : https://stackoverflow.com/questions/47913944/where-json-in-laravel-gives-error-sqlstate42000-check-the-manual-that-corresp

반응형