マイグレーションファイルを作る
php artisan make:model Post –migration
マイグレーションをする
php artisan migrate
sqlite
sqliteを使う
$ sqlite3 database/database.sqlite
データ構造を見る
sqlite> .schema posts
sqliteを抜ける
sqlite > .quit
tinker
tinkerを使う
$ php artisan tinker
インスタンスを作る
$post = new App\Models\Post();
レコードを挿入する
$post->title = ‘title 1’;
$post->body = ‘body 1’;
$post->save();
レコードを挿入する(MassAssignmentで)
App\Models\Post::create( [‘title’ => ‘title2’ , ‘body’ => ‘body2’] );
App\Models\Post::create( [‘title’ => ‘title3’ , ‘body’ => ‘body3’] );
挿入したデータの確認
App\Models\Post::all();
App\Models\Post::all()->toArray();
MassAssignmentを無効化する設定
Post.phpに追加する
protected $fillable = [ ‘title’ , ‘body’ ];
追加したあとは一旦tinkerを抜けて入り直すことを忘れずに
特定のIDのデータを表示する
App\Models\Post::find(3)->toArray();
whereを使う
App\Models\Post::where(‘id’,’>’,2)->get()->toArray();
これはgetが必要
orderByを使う
App\Models\Post::where(‘id’,’>’,1)->orderBy(‘created_at’,’desc’)->get()->toArray();
latestを使う
App\Models\Post::where(‘id’,’>’,1)->latest()->get()->toArray();
take(limit)を使う
App\Models\Post::where(‘id’,’>’,1)->take(1)->get()->toArray();
レコードの更新と削除
インスタンスを作って値を入れてsaveやdeleteをするだけ。
$post = App\Models\find(3);
$post->title = ‘title 3 updated’;
$post->save();
$post->delete();
Controller
ddを使ってデータをダンプする。dumpとdieの略
use App\Models\Post; $posts = Post::orderBy('created_at','desc')->get(); dd($posts); //もしくはdd($post->toArray());
View
コメントアウト
{{-- --}}
@foreach
@foreach($posts as $post) <li><a href="">{{$post->title}}</a></li> @endforeach
@forelse
@forelse($posts as $post) <li><a href="">{{$post->title}}</a></li @empty <li>No posts yet.</li> @endforelse
改行を含む文を書き出す
{!! nl2br(e($post->body)) !!}
urlを生成する
<li><a href="/posts/{{ $post->id }}">{{ $post->title }}</a></li> <li><a href="{{ url('/posts', $post->id) }}">{{ $post->title }}</a></li> <li><a href="{{ action('PostsController@show', $post->id) }}">{{ $post->title }}</a></li>
Implicit Binding
web.php
引数をpostにして
Route::get('/posts/{post}', 'PostsController@show');
Controller
showの引数をPostの$postにすれば、findとかいらない。
PostとはモデルのPostのことでしょう。
public function show(Post $post) { // $post = Post::findOrFail($id);
web.php
各順番に注意
ルーティングは先に書いたものから実行されるので、こう書くと/post/createにアクセスしても、{post}の中にcreateが入っていたと誤認されてしまう。
Route::get('/posts/{post}','App\Http\Controllers\PostsController@show'); Route::get('/posts/create','App\Http\Controllers\PostsController@create');
その場合は、createの方を上に持ってくるとよい。
もしくは、こうしてwhereを使ってあげるとよい。
Route::get('/posts/{post}', 'PostsController@show')->where('post', '[0-9]+'); Route::get('/posts/create', 'PostsController@create');
コメント