[英]Search in Json column with Laravel
在我的電子郵件表中,我有一個名為To
的列,列類型為Json
。 這是存儲值的方式:
[
{
"emailAddress": {
"name": "Test",
"address": "test@example.com"
}
},
{
"emailAddress": {
"name": "Test 2",
"address": "test2@example.com"
}
}
]
現在我想要發送到“test@example.com”的所有電子郵件的集合。 我試過:
DB::table('emails')->whereJsonContains('to->emailAddress->address', 'test@example.com')->get();
(請參閱https://laravel.com/docs/5.7/queries#json-where-clauses )但我沒有找到匹配項。 有沒有更好的方法來使用 Laravel (Eloquent) 進行搜索?
在調試欄中,我可以看到此查詢被“翻譯”為:
select * from `emails` where json_contains(`to`->'$."emailAddress"."address"', '\"test@example.com\"'))
箭頭運算符在數組中不起作用。 改用這個:
DB::table('emails')
->whereJsonContains('to', [['emailAddress' => ['address' => 'test@example.com']]])
->get()
我沒有使用 json 列,但正如文檔所指,下面的代碼應該可以正常工作。
DB::table('emails')
->where('to->emailAddresss->address','test@example.com')
->get();
如果以 json 格式存儲數組。 只要有一個 ID 數組列表,我就是這樣做的。
items 是列名, $item_id 是我搜索的詞
// $item_id = 2
// items = '["2","7","14","1"]'
$menus = Menu::whereJsonContains('items', $item_id)->get();
檢查whereJsonContains
方法的 Laravel API 文檔https://laravel.com/api/8.x/Illuminate/Database/Query/Builder.html#method_whereJsonContains
使用 Eloquent => Email::where('to->emailAddress->address','test@example.com')->get();
您可以在類似條件下使用 where 子句
DB::table('emails')->where('To','like','%test@example.com%')->get();
或者,如果您使用 Eloquent 將模型映射到電子郵件表名稱作為電子郵件
Email::where('To','like','%test@example.com%')->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.