我一直在使用 laravel 5.3 版本,在一個表中我有一個 json 列,我在其中保存了類別表的平均評分。因此,產品類別表有一列“詳細資訊”作為保存 avgRating 的 json 資料型別。我想在那個 json 列中運行一個查詢。我想用平均評分過濾該類別。因此,來自前端的評級來自一個用逗號分隔的引數,以便可以使用多個評級過濾類別。
$productCategory = ProductCategory::query();
$ratings = explode(',',$params['ratings']);
$productCategory = $productCategory->whereIn('detail->avgRating',$ratings)->get();
我想實作這樣的目標。我正在使用 Postgres
uj5u.com熱心網友回復:
事實證明,在問這個問題的時候有太多的不確定性。一旦提問者分離了問題并發現原始查詢
DB::select(DB::raw("SELECT * FROM product_categories where detail->>'avgRating' in ('2.0','4.0')"));
在 Postgres 中作業,從那時起,提問者可以更輕松地找出where子句中的實際解決方案。我假設它是
detail->>avgRating
代替
detail->avgRating
但來自尚未確認的評論部分。但這個故事的寓意是,每當人們遇到一個可能與 RDBMS 相關的雄辯問題時,首先理清原始查詢,然后對應該生成的內容有扎實的知識,就很有意義了。第一點可以切換到 Eloquent 代碼并在那里應用解決方案。
uj5u.com熱心網友回復:
您應該使用whereJsonContains 或whereRaw:
$productCategory->whereJsonContains('detail->>avgRating',$ratings)->get();
或者
$productCategory->whereRaw('JSON_CONTAINS(detail->>avgRating, ?)', $ratings)->get();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/379927.html
標籤:php json 拉拉维尔 PostgreSQL的
