创建一个 cron 以自动启动数据库播种器
Posted
技术标签:
【中文标题】创建一个 cron 以自动启动数据库播种器【英文标题】:Create a cron in order to launch database seeder automatically 【发布时间】:2016-07-11 23:12:17 【问题描述】:在我的 Laravel 项目中,我有一个通过 url 获取的数据库。 这个数据库是 json 格式的。按照我的项目规范,我必须在我的本地项目中整理数据库,创建一个每月的 cron 以便每月更新一次。
恢复数据并不难,但我必须用这些数据创建一些播种机。有没有办法为数据库播种机实现每月 cron,就像我使用每月 cron 来更新初始数据一样?
更具体地说,这是我的 cron 来恢复我的 CronController.php
中的初始数据:
public static function updateJson(Request $request)
$type="application/json";
$charset="utf-8";
$path = 'database/market.json';
$time=filemtime($path);
$update=date("Y-M-d",$time);
$updateMonth= date('Y-M-d',strtotime('+1 month',strtotime($update)));
$now = date('Y-M-d');
if($now >= $updateMonth)
$data = file_get_contents('url/for/the/public/database');
$data = mb_convert_encoding($data, 'html-ENTITIES');
$res= file_put_contents($path, $data);
$whatIReallyNeed='update ok';
return response()->json($whatIReallyNeed)->header('Content-type', $type, 'charset', $charset);
else
$error = 'no need to update';
return response()->json($error)->header('Content-type', $type, 'charset', $charset);
例如我的数据库中有一个town表,检查这个表的迁移:
class CreateTownTable extends Migration
/**
* Run the migrations.
*
* @return void
*/
public function up()
Schema::create('town', function (Blueprint $table)
$table->increments('id');
$table->string('name', 255);
$table->timestamps();
$table->softDeletes();
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::drop('town');
以及从 json 数据库 TownTableSeeder.php
注册数据的播种机:
public function run()
$path = "public/database/market.json";
// get contents of file
$json = file_get_contents($path);
// decode json datas
$datas = json_decode($json, TRUE);
// get the multi json array
$arrayFeatures = $datas["features"];
// define a new empty array
$arrayTown = array();
// populate the new array with values we need
foreach ($arrayFeatures as $feature)
array_push($arrayTown, $feature["properties"]["commune"]);
// get unique entry for array
$results = array_unique($arrayTown);
// get only vales of array after do array_unique (no index)
$whatIReallyNeed = array_values($results);
foreach ($results as $result)
DB::table('town')->insert([
'name' => $result,
]);
所有这一切都很好,现在我想知道当 cron 更新了我存储在我的项目中的 json 数据库时,我是否可以启动种子迁移。
【问题讨论】:
【参考方案1】:您可以使用Laravel Events。当cron更新json数据时,只需fire an event。
手册中的示例:
Event::fire(new PodcastWasPurchased($podcast));
【讨论】:
谢谢你的回答,我是 Laravel5 的新手(顺便说一句,这是一个很好的框架),即使我没有构建我的整个 Laravel Event,它似乎是一个很好的解决方案,所以我验证你的回答。当我的代码将完整构建时,我发布事件,也许它可以帮助某人。祝你有美好的一天,愉快的编码!以上是关于创建一个 cron 以自动启动数据库播种器的主要内容,如果未能解决你的问题,请参考以下文章
从 cron 重新启动弹性 beanstalk 应用程序服务器