- 追加blogs表
生成migrations文件
// 表名blogs 文件名 create_blogs_table
php artisan make:migration --create=blogs create_blogs_table
追加内容
public function up()
{
Schema::create('blogs', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
$table->string('content', 200);
$table->integer('user_id')->index();
});
}
执行文件
// 生成新追加的表
artisan migrate
// 或者表全部重新生成
artisan migrate:fresh --seed
- 生成Blog模型和资源控制器BlogController和路由
- 生成视图文件
<div class="form-group">
<label for="">内容</label>
<textarea class="form-control" name="content">{{old('content')}}</textarea>
</div>
- Blog模型中
// 添加白名单
protected $fillable = ['content', 'user_id'];
$fillable 只控制批量赋值允许填充的属性白名单,store () 方法没有批量赋值,不受控制。
$fillable 与 $guarded 只限制了 create 方法,而不会限制 save方法。
$fillable 和 $guarded 两个属性是用来控制批量赋值的,批量赋值是什么意思?并不是数据填充,一次填充到数据库 N 条记录的概念,这里(在讲 $fillable 和 $guarded)所谓的批量赋值仅是指在创建记录的时候传入的属性值。所谓的批量是相对于 N 个请求来说的批量。
- User模型中追加方法,使之与Blog关联
public function blogs() {
return $this->hasMany(Blog::class);
}
laravel belongsToMany和hasMany用法解析
模型间关系(关联)hasMany,belongsTo 的用法
- 控制器中调用
\Auth::user()->blogs()->create($data);
\Auth::user()返回User模型的实例,再调用其中blogs方法,最后创建数据
因为模型关联,所以会自动将User的id自动赋予Blog的user_id,如果不叫user_id则不会自动关联,需要hasMany指定参数
- 生成Blog模型工厂并在tinker下测试
artisan make:factory --model=Blog BlogFactory // 必须要--model,不然找不到模型
$factory->define(Blog::class, function (Faker $faker) {
return [
'content' => $faker->text(20),
'user_id' => $faker->randomElement([1, 2, 3]) // 随机取123中的一个数
];
});
factory(App\Blog::class, 20)->make()
- 生成填充文件
public function run()
{
factory(\App\Blog::class, 20)->create();
}
注册文件
public function run()
{
// $this->call(UsersTableSeeder::class);
$this->call(UserSeeder::class);
$this->call(BlogSeeder::class);
}
- 执行