2017-07-18 137 views
0

我試圖使用以下代碼從我的訂閱表中使用testId列檢索整個訂閱對象。 testId列delclared爲「JSON」類型,但在現實中,這個專欄的內容是一個字符串如下數組:Laravel Eloquent:使用JSON列鍵從數據庫獲取對象

["51602a95-73d1-4c24-b3b3-eee288b427e4"] 

我試圖讓這個代碼,但加時賽沒有按」認購對象工作。我怎麼能通過搜索testId的值到數組中來獲得訂閱對象的這段代碼?

function getSubscriptionByTestId($testId) { 
    $subscription = Subscription::where('testId', $testId)->first(); 
    return $subscription; 
} 
+0

它看起來像Laravel 5.3做出嘗試在允許JSON列使用'的查詢 - >在哪裏( 「{column} - > {value_or_index}」,「{operator}」,「{comparison}};',見https://mattstauffer.co/blog/new-json-column-where-and-update-syntax- in-laravel-5-3以獲得更多細節。注意,如果你不在Laravel 5.3中,'DB :: raw()'查詢很可能是你最好的選擇。 –

回答

2

如果所有的值都像["51602a95-73d1-4c24-b3b3-eee288b427e4"]這取決於你的數據庫引擎可以使用:

$subscription = Subscription::where('testId','like', "%$testId%")->first(); 
0

您可以使用原始查詢嘗試以下操作。我不確定如何用雄辯處理這個問題,但會進一步調查。

return DB::select(
     "SELECT * FROM subscription 
     WHERE testId->\"$[0]\" = \"{$testId}\""   
    );