当前位置: 首页 > news >正文

永嘉网站制作系统pc端网页设计公司

永嘉网站制作系统,pc端网页设计公司,怎么做网站站内搜索,做电影网站如何盈利在这一部分中,我们将创建数据库的结构。 我们将使用迁移创建表,并使用播种器为数据库播种。 此外,您还将学习如何从LoremPixel中获取一些随机图像,并使用Flysystem将其放置在文件系统中。 您还将使用Faker库添加一些随机生成的数据…

在这一部分中,我们将创建数据库的结构。 我们将使用迁移创建表,并使用播种器为数据库播种。 此外,您还将学习如何从LoremPixel中获取一些随机图像,并使用Flysystem将其放置在文件系统中。 您还将使用Faker库添加一些随机生成的数据。
与第1部分非常相似,您可以从github下载此部分的代码。

安装库

使用Composer安装非常简单。

需要这些项目:

"fzaninotto/faker": "1.5.*@dev","league/flysystem": "dev-feature/eventable-filesystem","dropbox/dropbox-sdk": "dev-master"

执行composer update ,所有内容都将顺利安装和更新。

建立数据库的结构

到目前为止,我们只有一个迁移文件。 我们的应用程序还需要两个。 一个表将保留照片数据,而另一个表将保留类别数据。 要了解有关Artisan和Migrations的更多信息,请参阅这篇文章 。

php artisan migrate:make create_photos_tablephp artisan migrate:make create_categories_table

这两个命令创建两个迁移文件。 让我们开始用一些模式填充它们。 首先,我们从照片迁移文件开始。 停一会儿,想一想我们需要什么。 之前,我们安装了flysystem库。

flysystem库可以处理不同位置的文件:本地文件系统,Dropbox,AWS3,Rackspace Cloud Files等。 我们在开发环境中将其用于本地文件系统,并且必须使用Dropbox进行生产。 这是为什么? Heroku是Paas(平台即服务),因此我们无法完全控制文件系统。 只有两个可写的目录: ./temp./logs 。 您只能使用git进行部署来写入文件,而不能在任何其他文件夹中写入文件。 我们为什么不只使用这两个目录? 因为它们是暂时的。 如果出现问题,并且Dyno重新启动,则这些目录中的所有文件都将被删除。 使用这两个目录并不安全。

如果您想了解有关flysystem的更多信息,请阅读Lukas White 撰写的有关sitepoint的文章或他们的文档 。

Dropbox应用程序

在使用flysystem和Dropbox进行生产之前,我们必须创建一个Dropbox应用程序,该应用程序允许我们使用其Api。 然后,我们需要进行一些配置。 如果您还没有Dropbox帐户,请创建一个帐户,然后返回本文的其余部分。 如果您使用Rackspace或AWS3,则可以自由使用其中任何一个。 我在这里使用Dropbox是因为它不需要信用卡,而且可以免费使用。 点击链接并创建一个Dropbox应用。 这是创建一个的方法。

Create a DropBox App

接下来是配置。 我们将仅在生产中使用它。 将配置与App逻辑分开是一个好主意。 在/app/config/app/config/production创建dropbox.php

return array('token'     =>  'token_here','appName'   =>  'Your App Name');

为了检索使用:

Config::get('dropbox.appName');Config::get('dropbox.token');

我们需要flysystem创建images文件夹(该文件夹将保存images/photos )并将其删除。 在up方法中,我们将创建文件夹,而在down方法中,我们将其删除。 在__construct我们通过传入本地适配器(或Dropbox,Rackspace…)来创建Filesystem对象。 在该本地适配器内,我们指定一个路径。

请注意,在迁移过程中创建文件夹并将其删除是一种反模式。 这并不重要,但它打破了单一责任原则。 不用担心,该代码仅用于演示目的并向您展示该库的工作方式–请记住这一点,并下次尝试在控制器中使用它。

public_path()函数是一个Laravel辅助函数返回的完整路径, public文件夹。

要定义模式,只需指定要使用的字段类型,然后将字段名称作为参数即可。 有关模式的更多信息,请阅读Laravel文档 。

/* /app/database/migrations/some_date_CreatePhotosTable.php */use Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;use Dropbox\Client;use League\Flysystem\Filesystem;use League\Flysystem\Adapter\Local as Adapter;use League\Flysystem\Adapter\Dropbox;class CreatePhotosTable extends Migration {private $filesystem;public function __construct(){if(App::environment() === "local"){     // If its on local use the local filesystem$this->filesystem = new Filesystem(new Adapter( public_path() ));}else{                                  // Use dropbox on other cases, // including testing here (not a good idea)$client = new Client(Config::get('dropbox.token'), Config::get('dropbox.appName'));$this->filesystem = new Filesystem(new Dropbox($client));}}public function up(){$this->filesystem->createDir('images');Schema::create('photos', function($table){$table->increments('id');$table->integer('user_id');$table->string('title');$table->string('url')->unique();$table->text('description');$table->integer("category");$table->timestamps();});}public function down(){Schema::dropIfExists('photos');try{$this->filesystem->deleteDir('images');}catch (\Dropbox\Exception_BadResponse $e){}}}

对于up方法,我们为照片创建了iduser_idtitleurlcategorydescription 。 我们还使用了看起来不像其他东西的东西。 $table->timestamps()是一个特殊功能,它会自动添加另外两个字段: created_atupdated_at

down方法中,删除表(如果存在),然后删除在up方法中创建的文件夹。 我们将使用播种机在此处设置一些图像,因此最好删除所有照片并使用新照片进行播种。

该种子文件也可以在生产中使用。 为了进行开发,我们使用了本地文件系统,并使用了Dropbox App。 将所有更改上传到Heroku并进行迁移和播种,您将在Dropbox App中看到已创建一个文件夹。

创建照片迁移文件后,我们需要类别迁移文件。 这比较容易。 在模式中,我们创建一个ID,该ID在每次将新记录添加到表中时都会递增。 我们还需要一个类别名称。 通过具有类别的名称和ID,我们可以使事情更加动态。 在down方法中,删除表(如果存在)。

/* /app/database/migrations/some_date_CreateCategoriesTable.php */use Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreateCategoriesTable extends Migration {public function up(){Schema::create('categories', function($table){$table->increments('id');$table->string('name');$table->timestamps();});}public function down(){Schema::dropIfExists('categories');}}

创建这两个文件后,让我们通过执行以下操作来应用迁移:

php artisan migrate:refreshphp artisan db:seed

要么

php artisan migrate:refresh --seed

这将还原旧的迁移(如果您已应用迁移)并构建新的架构。 之后,将执行播种机。

如果您尚未进行迁移,则会显示错误。 使用php artisan migrate ,之后一切都会正常。

创建模型

在继续进行播种之前,最好先创建模型。 在创建模型,迁移和种子时,您必须知道自己在做什么。 仔细考虑您真正想要的。 模型之间的关系很重要,可以节省时间。

Laravel的模型扩展了Eloquent的ORM类。 口才是一个很好的功能。 在本系列中处理REST Api的过程中,此功能可帮助我们在端点上发挥很多作用,以将与给定资源相关的数据放入。 前端侧的EmberJs具有类似的关系逻辑,这可以使大部分代码自动化。 这种奇偶校验使代码更易于维护和扩展。

对于用户模型,您不必担心。 它由Laravel创建并可以使用。 编辑该模型,并与我们将要创建的其他模型添加一些关系。 模型位于/app/models

/* /app/models/User.php */use Illuminate\Auth\UserTrait;use Illuminate\Auth\UserInterface;class User extends Eloquent implements UserInterface{use UserTrait;protected $table = 'users';     // The table that this model usespublic function photos(){return $this->hasMany('Photo');}}

photos()方法指定与Photo模型的关系,该关系目前尚不存在。 另外,受保护的变量$table用于指定该模型使用的表名。 作为附加功能,此模型实现了UserInterface ,以便与身份验证更轻松地集成。

让我们创建照片模型。 在/app/models创建一个新文件,并将其命名为Photo.php 。 请记住,类名应以大写字母开头,并扩展Eloquent。

/* /app/models/Photo.php */class Photo extends Eloquent {protected $table = 'photos';public function author(){return $this->belongsTo('User', 'user_id');}}

在这种情况下,不必指定$table变量。 如果$table变量不存在,Laravel将名称的小写形式用作表名。 我们在这里指定了另一个关系: belongsTo关系。 第一个参数用于与模型有关系的模型。 第二个是用于此模型上用于指定哪个用户拥有此照片的字段。 它可以这样使用:

Photo::find($id)->author;

这将返回一个ID与Photo模型上的user_id相同的User对象。

对于类别,在/app/models创建另一个文件,并将其命名为Category.php

class Category extends Eloquent {protected $table = 'categories';}

给表添加一些数据

现在我们有了数据库的结构,是时候为它添加一些数据了。 这就是Faker库所在的位置。有关Faker的更多信息,请阅读Faker文档或了解更多高级功能和用例,请阅读《使用Faker简化测试数据生成》 。

目前,我们只有一个种子文件。 让我们对其进行编辑,并使用Faker库生成伪造的用户名和密码。 编辑/app/database/seeds文件夹中的UserTableSeeder.php文件。

我们需要认识一个用户进行身份验证。 应该在没有Faker的情况下创建数据库中的一位用户。

初始化Faker对象:

$faker = Faker\Factory::create();   // Faker uses Factory design pattern

如何创建用户名和密码:

$faker->userName;                           // returns a usernameHash::make($faker->name . $faker->year);    // Creates a password

最后,UserTableSeeder应该看起来像这样:

/* /app/database/seeds/UserTableSeeder.php */class UserTableSeeder extends Seeder {public function run(){Eloquent::unguard();DB::table('users')->delete();$faker = Faker\Factory::create();for($i = 0; $i < 2; $i++){User::create(array('username' => $faker->userName,'password' => Hash::make($faker->name . $faker->year),'name' => $faker->name,'lastname' => $faker->lastName));}User::create(array('username' => 'foo','password' => Hash::make('password'),'name' => $faker->name,'lastname' => $faker->lastName));}}

通过执行此种子级,我们创建了两个假用户和一个硬编码用户。 稍后,我们将使用基本身份验证测试此应用,因此我们需要拥有一个已知用户。

剩下的是类别和照片种子文件。 在/app/database/seeds内创建PhotoTableSeeder.phpCategoryTableSeeder.php

/* /app/database/seeds/CategoryTableSeeder.php */class CategoryTableSeeder extends Seeder {public function run(){Eloquent::unguard();DB::table('categories')->delete();for($i = 1; $i < 5; $i++){Category::create(array('name' => 'category' . $i));}}}

对于类别种子文件,我们甚至不需要Faker。 只需categorynumber就可以用作categorynumber的名称。 每次插入新类别时,ID都会自动递增。

照片种子类有点棘手。 在此迁移文件中,我们需要从LoremPixel获取一些图像并将其放入/public/images文件夹。 另外,我们需要带本地适配器或Dropbox适配器的flysystem库。

这就是我们创建随机字符串的方式。 参数的长度是随机字符串的长度。 这将是图像的名称。

$faker->lexify($string = '???????????????????');

从lorempixel获取图像很简单:宽度和高度是URL片段。 然后,这样的链接将返回给定大小的图像。 通过多次请求此URL,将返回不同的图像,因此不会发生重复。 file_get_contents($url); 获取该URL的内容。 在这种情况下,该网址将为http://lorempixel.com/400/200/ ,这是一个图片

file_get_contents('http://lorempixel.com/640/400/');

Faker的句子方法返回指定数目的单词作为参数的句子

$faker->sentence(40);

最后, PhotoTableSeeder.php应该看起来像这样。

/* /app/database/seeds/PhotoTableSeeder.php */use Dropbox\Client;                     // DropBox Clientuse League\Flysystem\Filesystem;use League\Flysystem\Adapter\Local as Adapter;use League\Flysystem\Adapter\Dropbox;   // The DropBox Adapterclass PhotoTableSeeder extends Seeder {private $filesystem;public function __construct(){if(App::environment() === "local"){$this->filesystem = new Filesystem(new Adapter( public_path() . '/images/'));}else{$client = new Client(Config::get('dropbox.token'), Config::get('dropbox.appName'));$this->filesystem = new Filesystem(new Dropbox($client, '/images'));}}public function run(){Eloquent::unguard();DB::table('photos')->delete();$faker = Faker\Factory::create();for($i = 0; $i < 10; $i++){$file = file_get_contents('http://lorempixel.com/640/400/');$url = $faker->lexify($string = '???????????????????');try{$this->filesystem->write($url, $file);}catch (\Dropbox\Exception $e){echo $e->getMessage();}Photo::create(array('url' => $url,'user_id' => (int) rand(1, 4),'title' => $faker->sentence(5),'description' => $faker->sentence(40),'category' => rand(1, 4)));}}}

不要忘记将这些迁移文件调用到DatabaseSeeder.php 。 将这些行添加到/app/database/seeds/DatabaseSeeder.php

$this->call('PhotoTableSeeder');$this->call('CategoryTableSeeder');

这样,DatabaseSeeder将调用两个新的种子文件。 让我们在Heroku上应用迁移和播种。 首先推动项目

git add .git commit -m "a message here"git push heroku master

然后运行迁移和种子

heroku run php artisan migrate:refresh --seed

在服务器上执行迁移和种子设置后,这是我的保管箱应用程序文件夹中的屏幕截图。

Dropbox apps folder

结论

在这一部分中,我们看到了如何使用迁移来创建数据库,以及如何使用带有一些伪造数据的播种器来播种该数据库。 我们使用了Faker库和Flysystem来处理文件系统。 Eloquent是一种易于使用的ORM,但功能非常强大–了解Eloquent的工作原理可简化您的工作流程。 别忘了,一切都始于数据库体系结构,一开始就定义一个智能的体系结构会在以后为您省去许多麻烦。 请继续关注第3部分!

From: https://www.sitepoint.com/build-database-eloquent-faker-flysystem/

http://www.lbrq.cn/news/2363887.html

相关文章:

  • 做个外贸的网站不懂英语咋做互联网营销模式有哪些
  • 慧聪网de网站建设策略seo同行网站
  • 微网站建设计划书网络营销主要是学什么的
  • 手表网站那个好百度竞价代理公司
  • 一流的手机网站建设seo专业技术培训
  • 合肥网站忧化百度快速排名 搜
  • 网络规划设计师难考吗网站关键词优化教程
  • 微网站平台热搜词排行榜
  • 网站开发立项报告电商平台推广费用大概要多少
  • 宜宾网站建设北斗网络软文推广什么意思
  • 鸭梨网站建设北京网络优化推广公司
  • 企业展示型网站建设长沙seo网站排名
  • 建立网站需要分几部进行外链网
  • 八里庄网站建设本地推荐本地推荐
  • 如何加强英文网站建设百度推广业务电话
  • 做网站seo怎么赚钱cba最新排名
  • 如何在亚马逊做公司网站惠州seo代理商
  • 用电脑做服务器制作网站长沙seo平台
  • android app for wordpress无锡seo优化公司
  • 腾讯云服务器用什么做网站网络营销活动策划方案模板
  • 自如网站做的好 服务怎样申请网站
  • 外贸型网站建设方法网站源码交易平台
  • 给别人做网站赚钱谷歌广告怎么投放
  • 漳州台商投资区建设局网站如何创建自己的网站平台
  • 福州公司网站建设_老域名购买
  • 网站维护的内容主要包括百度广告收费表
  • 在线购物的网站制作百度招聘电话
  • 爱站数据网站排名推广
  • 淄博网站建设公司乐达宁德市是哪个省
  • 怎么做卖东西的网站查询关键词排名软件
  • mysql——搭建MGR集群
  • 模型移植实战:从PyTorch到ONNX完整指南
  • 2D视觉系统标定流程与关键要求
  • 壹脉销客AI电子名片源码核心架构
  • WebStorm vs VSCode:前端圈的「豆腐脑甜咸之争」
  • 指数加权的公式推导