用代码说话

相关命令:

创建迁移文件

php artisan make:migration Pate_table

进行迁移

php artisan migrate

创建模型文件

php artisan make:model Page

把如下文件内容复制到对应的文件下,就可以按照注释进行测试了。控制器的代码就需要自己动手一遍了,用一次就会了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Page extends Model
{
    //可批量注入的字段
    protected $fillable = ['*'];
    //不可批量注入的字段
    protected $guarded = [];

    //声明时间字段,这些字段可以调用Carbon,dateTime实例
    //如:
    //$page = Page::find(1);
    //dd($page->created_at->getTimestamp());
    protected $dates = ['created_at', 'updated_at'];

    //设置时间字段属性
//    protected  $dateFormat = 'U';

    //当使用 toArray() 和 toJson() 时要隐藏的字段
    protected $hidden = ['body'];

    //$hidden是隐藏 它是显示 两者存在一个就好
//    protected $visible = ['first_name', 'last_name'];


    //定义字段调用时的所用的格式
    //比如下面的$page->body 将自动json转array 存储的时候array自动转json
    protected $casts = [
        'body' => 'array',
    ];


    //append添加字段是当需要对数据添加不存在的字段的时候,在这里声明一下,
    //需要配合 getFooAttribute 方法使用,
    //注意:不要在这里写可调用的字段
    // 比如下面的 getTitleAttribute 这个,
    //如果 $append 数组中存在 title的话则会因为获取不到 $value 参数去执行方法内容 且会将结果覆盖到原有的字段
    protected $appends = ['other'];


    //当类似$page->title的时候调用该方法,
    //已发现的问题是在使用select foo as title的时候也会调用这个方法
    public function getTitleAttribute($value)
    {
        return strtolower($value).'+salt';
    }

    public function getOtherAttribute()
    {
        return 'this is other ziduan';
    }


    //当添加或更新title字段的时候将调用该方法,
    //例如$page->title = 'foo'; foo将作为参数传递到这里,
    public function setTitleAttribute($value)
    {
        $this->attributes['title'] = strtoupper($value);
    }
}

相关的表结构如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePagesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('pages', function (Blueprint $table) {
            $table->increments('id');
            $table->string('title');
            $table->string('slug')->nullable();
            $table->text('body')->nullable();
            $table->integer('user_id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('pages');
    }
}