首页 > 解决方案 > 如何检查laravel中是否存在通知

问题描述

我正在使用 laravel 附带的默认通知。我知道检查通知是否被读取的方法,但我不需要。我需要检查之前是否创建了通知。

laravel 中的默认通知表是这样的:

通知迁移

Schema::create('notifications', function (Blueprint $table) {
            $table->uuid('id')->primary();
            $table->string('type');
            $table->morphs('notifiable');
            $table->text('data');
            $table->timestamp('read_at')->nullable();
            $table->timestamps();
        });

我创建的通知返回一个数组,该数组被添加到通知表的数据字段中。

数组是这样插入的:

数据:

{“身份证”:77}

我试图检查关系是否存在,但我无法访问数组值。

我已经尝试了所有这些方法

$destination = User::findOrFail($model->user_id);
$previusNotification = $destination->notifications()->where('data.id', $model->id)->count() > 0;
or
$previusNotification = $destination->notifications()->where('data[id]', $model->id)->count() > 0;
or
$previusNotification = $destination->notifications()->where('data['id]', $model->id)->count() > 0;

但它总是返回:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'data.id'

标签: laravel

解决方案


您想检查data通知表中字段的 JSON 字符串是否具有id匹配的$model->id. 您可以使用whereJsonContains()从 JSON 字符串中提取值。

->whereJsonContains('data->id', $model->id)

推荐阅读