股票场内基金交易,没时间盯盘?
前提
- 下载代码,确保API运行环境搭建成功,可以参考Windows 10 配置 Laravel 运行环境。
- 相应Table的设计已经完成。
- 相应的数据库已经创建。
编写数据库迁移(migration)
-
首先根据设计好的Table在database/migration文件下创建相应的php文件,此文件主要用于创建相应Table。我的任务是用到了两个Table:jobs和companies,可以用命令快捷创建:
php artisan make:migration table_name
-
创建后就可以填写Table中相应的数据了,此php文件中有
up()
和down()
两个fuction,up()
方法可为数据库增加新的数据表、字段、或索引,down()
方法则可简单的反向运行up()
方法的操作。具体的填写可以参考xianyu和miaomiao的代码,都很简单,这里贴下自己的:123456789101112131415161718192021222324public function up (){Schema::create('jobs', function (Blueprint $table) {$table->increments('id')->comment('工作职位ID');$table->string('name', 100)->comment('职位名称');$table->unsignedInteger('company_id')->comment('公司ID');$table->unsignedInteger('tech_level_id')->comment('工作对应的技术级别 ID');$table->unsignedTinyInteger('status')->comment('招聘状态');$table->unsignedTinyInteger('wage_pay_way')->comment('工资支付方式 ');$table->unsignedInteger('wage')->comment('工资');$table->string('work_time_begin', 20)->comment('上班时间');$table->string('work_time_end', 20)->comment('下班时间');$table->string('required_work_time', 80)->comment('工作时间要求');$table->string('required_degree', 80)->comment('学历要求');$table->timestamps();});}public function down (){Schema::dropIfExists('jobs');} -
接下来就可以运行命令
php artisan migrate
来创建Table了,运行此命令后去查看相应的数据库,可以发现Table已成功创建 - 关于数据库迁移的详细内容,可以参考数据库迁移
填充数据库
-
Table建立好了,可是里面没有数据,这时候就需要去填充数据库了。首先,去Entity文件夹下建立每个Table对应的Eloquent模型,其中用到了一个
belongsTo()
方法,是用来建立不同table之间的联系的,这里我的Job里面的一些数据需要从Company中取得,所以需要建立两者之间的联系。关于这一块,可以参考Eloquent:关联。1234567891011121314class Job extends Model {protected $fillable = ['name', 'company_id', 'tech_level_id', 'status', 'wage_pay_way', 'wage','work_time_begin', 'work_time_end', 'required_work_time', 'required_degree'];/*** 建立Job与Company的联系* @return BelongsTo*/public function companyInfo(){return $this->belongsTo(Company::class, 'company_id', 'id')->select('id', 'name', 'location');}} -
我们填充数据使用的是工厂函数,顾名思义,工厂函数就是像工厂一样批量产生数据的一个函数,不用我们手动一个一个去创建数据,能节省很多时间。其代码在database/factories/ModelFactory.php中,关于工厂函数更详细的介绍可参考模型工厂,下面是我使用到的工厂函数:
12345678910111213141516171819202122232425$factory->define (Job::class, function (Faker\Generator $faker) {return ['name' => 'PHP','company_id' => $faker->numberBetween(0,20),'tech_level_id' => $faker->numberBetween(0,3),'status' => $faker->numberBetween(0,1),'wage_pay_way' => $faker->numberBetween(0,1),'wage' => $faker->numberBetween(3000,9000),'work_time_begin' => '9:00','work_time_end' => '18:00','required_work_time' => '5 days/per week','required_degree' => 'no',];});$factory->define (Company::class, function (Faker\Generator $faker) {return ['name' => $faker->company,'area_ids' => $faker->numberBetween(0,50) . '|' . $faker->numberBetween(0,50),'location' => $faker->city,'count_members' => $faker->numberBetween(10,9999),];}); -
工厂函数编写完毕后,需要在database/seeds/DatabaseSeeder.php的
run()
中对其进行调用。123factory(Job::class, 20)->create();factory(Company::class, 20)->create(); -
以上步骤执行完后,就可以执行命令
php artisan db:seed
来生成数据到数据库中了。
编写路由
路由在app/Http/routes.php中,注意这里我把路由语句放到了$api->group()
中的函数里面,这是因为需要用到JWT验证,简单地说就是需要登录获得一个token,向服务器发送请求的时候必须带上这个token,服务器会先检查这个token,确认无误才会返回数据。关于JWT用法,可以参考JWT wiki。当然,如果不需要JWT验证的话,就不用把路由语句放到了$api->group()
中,比如下面的classes/{class_id}
这个路由,就不需要JWT验证
1 2 3 4 5 6 7 8 9 |
$api->get('classes/{class_id}', 'ClassesDetailsController@show'); // 获取班级详情 // 需提供 JWT $api->group(['middleware' => 'jwt.auth', 'providers' => 'jwt'], function ($api) { $api->get('jobs', 'JobController@index'); // 获取职位信息 }); |
编写控制器
-
上一步中调用了JobController控制器,接下来我们就需要编写这个控制器,路径位于Http\V1_0\Controllers中,其中的区块1就是刚才提到的JWT验证,而区块2主要是针对路由中是否含有tech_level_id做的一个判断处理
12345678910111213141516171819public function index(Request $request){//block 1$user = JWTAuth::parseToken()->authenticate();if (!$user) {return $this->response->array(['message' => trans('failure.job'),'status_code' => 417,]);}//block 2if (!$request->has('tech_level_id')) {$jobs = $this->job->getJob();} else {$jobs = $this->job->getJobByTechLevelID($request->tech_level_id);}return $this->response->collection($jobs, new JobTransformer());} -
控制器中调用了getJob()和getJobByTechLevelID()两个方法,这两个方法我们需要在Repositorise中编写,然后在Repositories\Interfaces中添加接口。主要是一些操作数据库的动作,关于数据库的一些查询操作,可以参考数据库:查询构造器
Repositories:
1234567891011121314151617class JobRepository Implements JobInterface {public function getJob(){$jobs = Job::with('companyInfo')->get();return $jobs;}public function getJobByTechLevelID($techLevelId){$jobs = Job::with('companyInfo')->where('tech_level_id', $techLevelId)->get();return $jobs;}}Interfaces:
1234567891011interface JobInterface {public function getJob();public function getJobByTechLevelID($techLevelId);} -
repository和interface编写完后还要去Providers\AppServiceProvider.php里面的
register()
中绑定下12$this->app->bind('App\Repositories\Interfaces\JobInterface', 'App\Repositories\JobRepository'); -
从数据库中取得数据后可以直接返回数据
$jobs
,但是为了数据显示得更友好,我们需要对数据进行一些转换,这里就用到了转化器Transformer,代码路径在Http\V1_0\Transformers\JobTransformer.php中,更详细的信息可以参考转化器12345678910111213141516171819class JobTransformer extends TransformerAbstract {public function transform(Job $job){return ['id' => $job->id,'name' => $job->name,'company_info' => $job->companyInfo,'tech_level_id' => $job->tech_level_id,'status' => $job->status,'wage_pay_way' => $job->wage_pay_way,'wage' => $job->wage,'work_time_begin' => $job->work_time_begin,'work_time_end' => $job->work_time_end,'required_work_time' => $job->required_work_time,'required_degree' => $job->required_degree,];}}
测试
想获得去掉 5 元限制的证券账户吗?

如果您想去掉最低交易佣金 5 元限制,使用微信扫描左边小程序二维码,访问微信小程序「优财助手」,点击底部菜单「福利」,阅读文章「通过优财开证券账户无最低交易佣金 5 元限制」,按照文章步骤操作即可获得免 5 元证券账户,股票基金交易手续费率万 2.5。
请注意,一定要按照文章描述严格操作,如错误开户是无法获得免 5 元证券账户的。
赞一个
感谢分享,看了你的过程,我发现自己还有很多不足啊。控制器那一块 我就没写。
分享很耐心,帮助很大.