2017-04-07 3 views
1

내 테이블에 json 문자열을 포함하는 문자열 필드가 있습니다. 그래서,Yii2 - 문자열 필드의 숫자에 대한 활성 레코드 쿼리 검색

id json 
---------------- 
1  [123,45,1] 
2  [23,4,5] 
3  [7,8,9] 

가 지금은 자신의 JSON 필드에 숫자를 포함하는 기록 (Yii2에서 활동 레코드를 사용)을 가져 오려는 :

을 tbl_table 이름은 그것의이 3 개 레코드가 말할 수 있습니다

id json 
---------------- 
1  [123,45,1] 
2  [23,4,5] 

이 실제로되지 않습니다 :

$res = Table::find()->where(['like','json','23'])->all(); 

이 쿼리는 다음 레코드를 반환 잘못된 결과가 있지만 내가 원하는 것은 id=2으로 레코드 만 반환하는 것입니다. 내가 어떻게 할 수 있니?

등등 ['like','json','5'] 또는 ['like','json','4'] 등과 같이? 숫자는 비슷하지만 정확한 숫자를 일치 시키길 원합니다.

및 기타 질문 ['like','json',[4,5,6]]이 질문에 대한 대답으로 마지막 질문을 원합니다. 다른 말로하면 나는 like 연산자에 배열을 전달하려고하며 자동으로 각 요소에 대해 OR 연산을 수행합니다. 어떻게 든 가능합니까? 배열에 대해 반복 작업을 수행하고 다중 쿼리 실행없이 마지막 질문 기능을 사용하여 여러 Or_like 조건을 만들 수 있습니까?

답변

2
+0

덕분에이 내가 원하는 트릭 버전의 MySQL에서 시작 JSON_CONTAINS 기능을

use yii\db\Expression; $expression = new Expression('JSON_CONTAINS(fied, value)'); $now = (new \yii\db\Query)->select($expression); 

p.s의 json_contains를 MySQL의 기능을 사용하고 사용합니다. –

+0

mariadb에 아날로그가 있습니까? –