laravel中的Database Notifications

创建Post and  User模型

php artisan make:model  Post

php artisan make:model  User

创建posts and  users 表文件

php artisan make:migration create_users_table --create=users

php artisan make:migration create_users_table --create=posts

在表文件设置表结构

Schema::create(‘posts‘, function (Blueprint $table) {
            $table->increments(‘id‘);
            $table->string(‘name‘);
            $table->timestamps();
        });

 Schema::create(‘users‘, function (Blueprint $table) {
            $table->increments(‘id‘);
            $table->string(‘name‘);
            $table->string(‘email‘);
            $table->string(‘password‘);
            $table->string(‘remember_token‘);
            $table->timestamps();
        });

生成posts and  users and notifications表

php artisan notifications:table

php artisan migrate

创建测试数据

先在database/factories/ModelFactoy.php中设置需要的数据类型

$factory->define(App\User::class, function (Faker\Generator $faker) {
    static $password;

    return [
        ‘name‘ => $faker->name,
        ‘email‘ => $faker->unique()->safeEmail,
        ‘password‘ => $password ?: $password = bcrypt(‘secret‘),
        ‘remember_token‘ => str_random(10),
    ];
});

$factory->define(App\Post::class, function (Faker\Generator $faker) {
    return [
        ‘name‘ => $faker->name,
    ];
});

再执行命令

php artisan  tinker

namespace App

factory(‘App\User‘,10)->create()
 
factory(‘App\Post‘,10)->create()

创建Notifications目录,以及通知文件

创建之后即可看见InvoicePaid.php  and  UserSubscrible.php 文件

php artisan make:notification   InvoicePaid

php artisan make:notification   UserSubscrible

Formatting Database Notifications

在 notification class 中可以用   toDatabase or toArray  方法 , 将数据存入到数据库中 ,,同时 这两个方法接受$notifiable entity,并返回一个普通的数组(json 格式)。我的代码如下:

//InvoicPaid
 public function toArray($notifiable)
    {
        return [
            ‘post_id‘ => $this->id,
        ];
    }
/// UserSubscribe
public function toArray($notifiable)
    {
        return [
            ‘subscribe_at‘=>Carbon::now(),// 记录时间
        ];
    }

设置路由

Auth::LoginUsingId(2);
Route::get(‘/‘, function () {
   // return view(‘welcome‘);

    Auth::user()->notify(new \App\Notifications\PostPublised());
    Auth::user()->notify(new \App\Notifications\UserSubscribed());
});

刷新时即可看见数据库中插入数据了,同时 read_at 字段为 null

Notification 得数据显示

在welcome.php添加如下代码,以驼峰的形式显示数据:

<h2>未读通知</h2>
    <ul>
        @foreach(Auth::user()->unreadNotifications  as $notification)
           {{-- @include(‘notification.‘.snake_case(class_basename($notification->type)))--}}

            <li>{{snake_case(class_basename($notification->type))}}</li>
        @endforeach
    </ul>
 
<form method="post" action="/user/notification" >    {{csrf_field()}}    <button type="submit">提交</button>

</form>

新建  /user/notification 路由, 把未读的通知变为已读的 ,及修改 read_at字段的值  , 第二次刷新页面就不会有数据显示 ,同时可以利用这个对应不同的 用户加载不同的模板

\Illuminate\Support\Facades\Route::post(‘/user/notification‘,function (){
    \Illuminate\Support\Facades\Auth::user()->unreadNotifications->markAsRead();
});
时间: 2024-10-15 19:35:24

laravel中的Database Notifications的相关文章

如何在 Laravel 中 “规范” 的开发验证码发送功能

什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+).ThinkSNS V4.ThinkSNS[简]. 需求场景 发送「验证码」或者「消息通知」,可发送到手机或邮箱中. 完成 首先,在Laravel中的规范就是使用Laravel的「消息通知」,这里基于场景为「验证码」.这个需求几乎所有软件系统都有使用到. 创建通知场景 第一步,使用php artisan ma

Laravel中定义复合主键

laravel默认主键是id,但有的时候我们建表时可能会需要用到复合主键,那么laravel中使用Eloquent Medel如何定义复合主键呢?直接上代码. 首先在app目录先创建文件 Traits/HasCompositePrimaryKey 内容如下: // Adjust this to match your model namespace! namespace App\Traits; use Illuminate\Database\Eloquent\Builder; trait HasC

Laravel中创建Model

以前使用的CI框架,最近学习使用Laravel框架了,把碰到的一些问题总结一下做个记录,以便以后回顾,也希望可以帮到碰到同样问题的朋友. 在Laravel中数据库表都是根据Laravel中写好的程序去生成的,这样的话便于使用git等版本控制进行管理整个项目. 以建立User_address模型为例进行记录: 1.使用php artisan make:model User_address命令创建模型,如图: 2.成功之后再程序目录app和database/migrations下会分别生成两个文件,

laravel中redis的配置和使用

引入redis composer require predis/predis 会在composer.json中引入最新版本的predis composer update 把下载predis 库加入到vendor,命令执行成功后,如图: 配置redis 说到laravel 中redis 的配置,其实默认项目中已经有了相关配置,只是默认没有使用.默认使用的是: 项目 使用类型 CACHE_DRIVER file SESSION_DRIVER file 添加redis数据库使用 'redis' =>

Laravel中利用队列发送邮件的方法示例

https://www.jb51.net/article/121647.htm 本文主要给大家介绍了关于Laravel中队列发送邮件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 批量处理任务的场景在我们开发中是经常使用的,比如邮件群发,消息通知,短信,秒杀等等,我们需要将这个耗时的操作放在队列中来处理,从而大幅度缩短Web请求和相应的时间.下面讲解下Laravel中队列的使用 1.配置文件 config/queue.php ? 1 2 3 4 5 6 7 8 9 1

Laravel中Redis的使用

安装 laravel中使用redis首先需要你通过 Composer 安装 predis/predis 包: composer require predis/predis 配置 redis的配置文件是:config/database.php 'redis' => [ 'client' => 'predis', 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PA

如何在Laravel中加密大文件?

Empcat的成功软件包应采用Laravel设计.用户可以上传任何大小的文件.出于安全原因,必须静态加密这些文件. Laravel提供加密,但是它们主要用于加密值.它使用加密的帮助程序方法很好地加密了小文件,例如图像,但是在此过程中,必须将文件的内容加载到内存中,这对于大文件是个问题. 我寻找了解决此问题的软件包或解决方案?找到了此Stack Overflow的答案?此PHP解决方案,它基本上是Stack Overflow中描述的解决方案的PHP. 我决定为Laravel创建一个扩展包,该扩展包

laravel中redis个方法的使用

在laravel中使用redis自带方法的时候会发现许多原生的方法都不存在了,laravel对其进行了重新的封装但是在文档中并没有找到相关的资料最后在 \vendor\predis\predis\src\Profile\RedisProfile.php 该文件的createCommand方法重打印出 $this->commands 发现许多方法名是被重写的,以下为所有重新定义的方法名 array(151) { ["EXISTS"]=> string(24) "Pr

Laravel中的日志与上传

PHP中的框架众多,我自己就接触了好几个.大学那会啥也不懂啥也不会,拿了一个ThinkPHP学了.也许有好多人吐槽TP,但是个人感觉不能说哪个框架好,哪个框架不好,再不好的框架你能把源码读上一遍,框架的设计思想理解了也能学到好多东西.况且有好多东西自己还不理解,所以认真学习一个框架这还是可以学不少东西的. 还是先说说Laravel吧,现在已经到5.2了.就我自己来说之前没有接触过laravel,但是学习过laravel之后感觉这个框架确实不错,并且老外用的不亦乐乎.他的开发社区还可以,文档比较齐