簡體   English   中英

使用 Laravel 在 Json 列中搜索

[英]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();

使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM