The last of laravel database relation.
$ php artisan make:model Post -m
$ php artisan make:model Video -m
$ php artisan make:model Tags -m
Schema::create('videos', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
$ php artisan make:model Taggable -m
Schema::create('taggables', function (Blueprint $table) {
$table->increments('id');
$table->integer('tag_id');
$table->integer('taggable_id');
$table->string('taggable_type');
$table->timestamps();
});
$ php artisan migrate
Post.php, Video.php
protected $fillable = ['name'];
public function tags(){
return $this->norphToMany('App\Tags', 'taggable');
}
Tags.php
class Tags extends Model
{
protected $fillable = ['name'];
}
insert into tags (name) values (‘php’);
insert into tags (name) values (‘ruby’);
model name間違えた。。
alter table taggables change column tag_id tags_id int;
Route::get('/create', function(){
$post = Post::create(['name'=>'my frist post']);
$tag1 = Tags::findOrFail(1);
$post->tags()->save($tag1);
$video = Video::create(['name'=>'video.now']);
$tag2 = Tags::findOrFail(2);
$video->tags()->save($tag2);
});
read
Route::get('/read', function(){
$post = Post::findOrFail(9);
foreach($post->tags as $tag){
echo $tag;
}
});
update
Route::get('/update', function(){
$post = Post::findOrFail(9);
foreach($post->tags as $tag){
$tag->whereId(1)->update(['name'=>'google']);
}
});
delete
Route::get('/delete', function(){
$post = Post::find(1);
foreach($post->tags as $tag){
$tag->whereId(1)->delete();
}
});