Laravelノート備忘録(書きかけ)

IT関連

 

マイグレーションファイルを作る

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');

 

コメント

タイトルとURLをコピーしました