– ログイン系のアプリケーションでは、まずUserを作り、一通りmodel, view, controller, middlewareが出来てから、OneToManyの機能を作り込んでいく
– 主要機能や機能的な優先度から開発するのではなく、データベースのテーブル構造に沿って、開発をしていく
– 先にDBにデータを入れながらコーディングしていく
$ php artisan make:controller –resource AdminPostsController
AdminPostsController.php
public function index()
{
//
return view('admin.posts.index');
}
/layouts/admin.blade.php
<li>
<a href="{{route('admin.posts.index')}}">All Posts</a>
</li>
<li>
<a href="{{route('admin.posts.create')}}">Create Post</a>
</li>
$ php artisan make:model Post -m
posts migration file
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned()->index();
$table->integer('category_id')->unsigned()->index();
$table->integer('photo_id')->unsigned()->index();
$table->string('title');
$table->text('body');
$table->timestamps();
});
$ php artisan migrate
Model:Post.php
protected $fillable = [
'category_id',
'photo_id',
'title',
'body'
];
$ php artisan tinker;
Psy Shell v0.7.2 (PHP 7.1.7 — cli) by Justin Hileman
>>> $post = App\Post::create([‘title’=>’my first post’, ‘body’=>’I love laravel’]);
=> App\Post {#661
title: “my first post”,
body: “I love laravel”,
updated_at: “2019-12-14 20:40:37”,
created_at: “2019-12-14 20:40:37”,
id: 1,
}
AdminPostsController.php
use App\Post;
public function index()
{
//
$posts = Post::all();
return view('admin.posts.index', compact('post'));
}
resources/views/posts/index.blade.php
<table class="table table-striped">
<thead>
<tr>
<th>Id</th>
<th>User</th>
<th>Category</th>
<th>Photo</th>
<th>Title</th>
<th>body</th>
<th>Created</th>
<th>Updated</th>
</tr>
</thead>
<tbody>
@if($posts)
@foreach($posts as $post)
<tr>
<td>{{$post->id}}</td>
<td>{{$post->user_id}}</td>
<td>{{$post->category_id}}</td>
<td>{{$post->photo_id}}</td>
<td>{{$post->title}}</td>
<td>{{$post->body}}</td>
<td>{{$post->created_at->diffForHumans()}}</td>
<td>{{$post->updated_at->diffForHumans()}}</td>
</tr>
@endforeach
@endif
</tbody>
</table>
Model:User.php
public function posts(){
return $this->hasMany('App\Post');
}
Model:Post.php
public function user(){
return $this->belongsTo('App\User');
}
public function photo(){
return $this->belongsTo('App\Photo');
}
public function category(){
return $this->belongsTo('App\Category');
}
> update posts set user_id=10 where id=1;
posts/index.blade.php
<td>{{$post->user->name}}</td>
Role.php
protected $fillable = [
'name'
];
外部設計やワイヤーフレームだと、ユーザーエクスペリエンスが非常に重要なので、まずユーザーの主要機能を先に書いて管理者ページは後に書いた方が書きやすいが、実装フェーズだとユーザー登録できる管理者から先にコーディングしていく。
他のフレームワークでもそうなのかもしれないが、Laravelの開発ではDBのリレーションが非常に重要なんですね。
設計時と実装時で、作っていく順番が異なるので、気を付けないといけない。主要機能や難易度などから順番に実装するのではなく、DBのリレーション構造順。