簡體   English   中英

如何從laravel 6的數據庫中的數組中刪除/更新單個值?

[英]How to remove/update single value from array in the database in laravel 6?

目前,我的數據庫中有一個名為userIds的列,它是一個數組。 我希望能夠從該數組中更新/刪除單個值,但我嘗試過的方法沒有奏效。

控制器

public function removeUser(Request $request) {
     $scrumId = $request->scrumId;
     $userId = $request->userId;

     DB::table('scrumboards')->where('userIds', $userId)->delete();

     return redirect()->back();
}

如何在不刪除整個列的情況下更新數據庫中數組中的單個值?

- 編輯 -

數據庫行示例:

title    UserIds
test     ["1"]

使用userIds真的很糟糕。 如果您的scrumboards數據變得巨大。

當找到帶有userid的 scrumboards 時,它會變得很慢。

受到推崇的:

所以你為什么不使用hasManymany-to-many關系,就像Scrumboard有很多Users

如果您的數據變得巨大,您可以向scrumboard_id添加索引,

計分板模型:

class Scrumboard extends Model {
    protected $table = 'scrumboards';
    public function users()
    {
        return $this->hasMany(User::class, 'scrumboard_id', 'id');
    }
}

用戶模型:

class User extends Model {
    protected $table = 'users';
    public function scrumboard()
    {
        return $this->belongsTo(Scrumboard::class, 'scrumboard_id');
    }
}

然后你可以像這樣刪除:

User::where('id', $userId)->delete();
# or
User::where('id', $userId)->update(['scrumboard_id' => null]);

不建議:

如果你真的想使用user_ids,你可以這樣做:(通過like找到user_id,通過replace其更新為空)

$sb = DB::table('scrumboards')->where('userIds', 'like', "%\"{$userId}\"%");
$sb->update(['userIds' => \DB::raw("REPLACE(userIds, '\"{$userId}\"', '')")]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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