繁体   English   中英

如何在未来在 Laravel 中的特定日期和时间发布博客文章

[英]How can I Publish A Blog Posts In The Future On A Specific Date And TIme In Laravel

我处于使用 laravel PHP 框架的初学者级别。 我开发了一个博客网络应用程序,但我想做一些升级。

其中一项升级是能够安排将来在选定的日期和时间发布帖子。 就像 Facebook 的那样,或者 10 月 CMS 中的rainlab 博客的那样。

我不知道该怎么做,如果有人可以帮助我,我将不胜感激。

实现延迟发布的最简单方法是将发布日期列(例如已发布的_at)添加到帖子表并检索发布日期 < 现在的帖子。

架构:

$table->timestamp('published_at');

检索示例:

$posts = Post
    ::where('published_at', '<', now())
    ->orderByDesc('published_at')
    ->paginate(50);
  1. 首先我将在像posted_at这样的数据库列中创建并显示,这些列稍后会有所帮助。
  2. 您应该使用创建命令

php make:command MyCommand

  1. 然后在您的应用程序/控制台/命令中,您将拥有您的命令

  2. 在应用程序/控制台/内核中

受保护的变量 $commands

注册您的命令,输入路径

  1. 在使用 Eloquent 或 Db 查询的命令中,获取 show=0 和 posts_at 的所有帖子

    $now=date("Ymd"); $data=DB::table('test')->where('show',0)->whereRaw("posted_at<$now")->get();
  2. 现在您可以使用每个循环并更改 show=1,如下所示:

     $date->each(function ($item){ DB::table('test')->where('id',$item->id)->update(['show'=>1]); });

最后一个工作放在内核代码中,它将在 1m 后运行,试试这个 ->

$schedule->command('myCommand')->everyMinute();

编辑:所以我检查了我的代码并进行了更改,因此您的命令或多或少应该如下所示:

 $now=date("Y-m-d");
 $data=DB::table('test')->where('show_',0)->whereRaw("date(posted_at)<='$now'")->get();
 $data->each(function ($item){
 DB::table('test')->where('id',$item->id)->update(['show_'=>1]);

如果您使用 DB,请记住在命令的标题中放入

 Use DB;

如果 Eloquent this 但您必须将 DB 更改为 Model_name

use App\Name_model;

这就是 Kernel.php

protected $commands = [
        'App\Console\Commands\MyCommand',
    ];

// and 

protected function schedule(Schedule $schedule)
    {
        $schedule->command('My:Command')->everyMinute();
    }

我检查我的测试数据库中的记录是否在 1 分钟后更改,并且 show_=0 更改为 show_=1,仅此而已

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM