- 投稿日:2020-10-28T23:51:06+09:00
Laravel:検索機能をつける方法
【概要】
1.結論
$変数 = モデルクラス :: where(カラム名 , $request->request)->all or find or first();をつける!
2.どのようにコーディングするか
app/Http/Controllers/PersonController.phppublic function search (Request $request) { $item = User::where('name',$request->input)->first(); #---❶ $param = ['input' => $request->input, 'item' => $item]; #---❷ return view('user.find', $param); #---❸ }
❶:Userテーブルで、whereを使用し、nameカラムを指定しています。Requestは、クライアントから送られてくる情報を含んでおり$request->inputでファイル以外のデータを受け取っています。firstは条件に引っかかった最初だけを拾っています。
❷:paramの中にinput, itemを入れて連想配列にしています。
❸:user/findはgetした時にsearchはpostで処理しています。getの際に、paramの情報も入っています。上記で記載したものをコントローラーに処理させたいので、ルーティングします。
routes/web.phpRoute::get('user/find' , 'App\Http\Controllers\PersonController@find' ); Route::post('user/find' , 'App\Http\Controllers\PersonController@search' );*部分検索についてはしっかり学習してから、また投稿します。
3.開発環境
PHP 7.4.10
Laravel 8.9
Apache 2.4.41
Mysql 5.6.47
Sequl Pro 1.1.2
- 投稿日:2020-10-28T23:32:56+09:00
【超自分用】Laravelのページネーションのまとめ【随時更新予定】
導入
以下のコマンド導入可能
php artisan vendor:publish --tag=laravel-paginationresources/views/vendor/pagination/の中にいろいろテンプレファイルができればおっけー
実装例
Contoroller側
xxxContoroller.php<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Book; class BookListController extends Controller { public function index() { $books = Book::join('users', 'books.create_user', '=', 'users.id') ->select('books.*', 'users.id', 'users.name') ->orderByRaw('books.created_at DESC') ->paginate(10); return view('bookList', ['books' => $books]); } }いろいろjoinとかしてますが、一旦無視してください。
>paginate(10);
で1ページに表示する数を設定view側
@if (count($books) > 0) <table class="table table-striped task-table"> <thead> <th>書籍タイトル</th> <th>投稿者</th> <th>投稿日</th> </thead> <tbody> @foreach ($books as $book) <tr> <td class="table-text"> <div>{{ $book->title }}</div> </td> <td class="table-text"> <div>{{ $book->name }}</div> </td> <td class="table-text"> <div>{{ $book->created_at }}</div> </td> </tr> @endforeach </tbody> </table> {{ $books->links('vendor.pagination.bootstrap-4') }} @endifいろいろごちゃごちゃ書いてますが無視してください
{{ $books->links('vendor.pagination.bootstrap-4') }}
でブートストラップのデザインが適用可能
導入した際のファイルが実際のスタイルを記述している
他にもいろんなテンプレがあるので試してみてください
もちろん自分で書き換えることも可能まとめ
めっちゃ便利。忘れたくない
- 投稿日:2020-10-28T19:24:10+09:00
MAMP環境でLaravelをインストールして画面表示するまで... 【2020年10月現在】
Laravelを以前にチーム開発で触ったことがあったのですが、初学者の中でもさらに初学者だったので頭の中が「?????」になっていました。最近はPHPだけの開発をしていたのですが時々息抜きでフレームワークを使ってみようと。
まず、2020年現在PHPのフレームワークで最も人気な「Laravel」を使うためにMACのPCで使えるよう環境構築をしてみました!その流れをご説明します。
Laravelをインストールをするために参考になったもの
PHPを学ぶのに大変役に立つ無料動画
↓
https://www.youtube.com/watch?v=cO9Kfh3lypg&list=PLCyDm9NTxdhLnA4tH5ToQR1K1LcWIAdOaわかりやすく日本語で説明されていたサイト
↓
https://www.ritolab.com/entry/22フレームワークとは…
まずはフレームワークを使うメリットを知っておく必要がありますね。一番気になることは「素早くWebアプリを作れる(基本的な機能が搭載済み)」ですね。他にもまとめてみると以下の点が良き。
- 開発時間の短縮へ
- ルールが決まっているから複数人の開発が便利
- ルールがあるから開発後のメンテナンスが楽
- セキュリティ機能が備わっているから質の高い開発が可能
2020年、phpの一番人気フレームワークはLaravel。CakePHPも求人が二番目に多いので良いよ。初心者に簡単に使えるフレームワークとしては、実はCodeIgniterがおすすめ。
Laravelを学ぶために
日本語公式サイトを見ましょう!
http://laravel.jp理解すべきものとして以下の三つがあります。
- MVCモデル(プログラムの構成)
- ORM(DB操作)
- Artisanコマンド
Laravelを使えるようにするための手順
先ほどもご紹介した動画を見ながら環境構築できます☺️。細かく説明をしている素晴らしい教材ですが、わからない点は一つ一つ調べながら取り組むとよりGOOD!
https://www.youtube.com/watch?v=yaitzPzBzuI&list=PLCyDm9NTxdhLnA4tH5ToQR1K1LcWIAdOa&index=2
開発環境構築とは...
アプリの実行環境(Laravelが動く)を作ること。Webサービスを公開するには以下のものが必要です。
- アプリ
- ミドルウェア(PHP Apache MySQLなど)
- OS(Mac Windows Linuxなど)
- ハードウェア/ネットワーク(サーバー機器など)
2~4(総称をインフラと呼ぶ)を準備することが実行環境構築となります。
開発環境構築方法の種類
「ローカルPCに構築」と「仮想環境を立てて構築」する方法があります。
ローカルPCに構築するなら、MAMPとComposerが必要ですね。LaravelはMAMPだけでなくComposerがないと難しいので使いましょう!
仮想環境を立てて構築する方法については、例として以下のものがあります。とりわけ開発現場では仮想環境を使うことが多いです。
- Vagrant + VirtualBox
- Docker
これからローカルPCに構築する方法をご紹介しますね。
ローカルPCに構築する方法
Composerとは...
サイトがあります。
https://getcomposer.orgこれは、PHPの”パッケージ”管理ツールです。
PHPの便利パーツ(ライブラリ)を一括でインストールして使えるよう管理してくれます。複数人で開発している時は、他の人にインストールしたものを渡せばすぐ使えます!
Laravelのインストール手順
MACのパソコンにMAMPをインストールした状態で、ターミナルにて以下のコマンドを打っていきます。
MAMP内のhtdocsへ移動(cd)します。
↓cd /Applications/MAMP/htdocs/composerのインストーラーをhtdocs内にダウンロードする
↓curl -sS https://getcomposer.org/installer | php「composer.pharを /usr/local/bin/composer に移動。composerというコマンドをどこからでも使えるようにする」を実行します。
↓sudo mv composer.phar /usr/local/bin/composersudoは管理者ユーザとして実行するという意味。mvは移動するということ。
composerが入ったかどうかの確認します。
↓composer -Vさらに続きます...
composerを使ってLaravelのファイルを作るよという意味。blogというディレクトリ(ファイル)の作成します。
↓composer create-project laravel/laravel --prefer-dist blog上記のblogというところは自分でファイル名を設定しましょう!これでディレクトリの作成が完成です。さらにLaravelに必要な一式もダウンロード完了!
--prefer-dist の部分は...
prefer-sourceの逆のコマンドです。可能であればdistからインストールすべし。これは、ビルドサーバーなど、一般的にベンダーのアップデートを実行しないようなケースでは、インストールを大幅に高速化することが可能に。
もしLaravelバージョンを指定してダウンロードしたい場合...
laravel/laravelの部分に修正をします。
例えばバージョン6 (LTS Long Term Support の略。つまり長期サポート)を希望するなら"laravel/laravel=6.*"と書く。
さらに続きます!
Laravelをインストールしたら
作成したblogファイルに移動
cd blog現在いるファイルの中身をチェックします。
lsそれから...
権限を変更します。
chmod -R 777 storage上記のコマンドは
storageを777(一番緩いものにする)という意味です。storage とは、ファイル操作に使います。これで、保存先を意識することなくファイルの操作が可能に。
https://reffect.co.jp/laravel/laravel-storage-manipulation-master
chmod -R 777 bootstrap/cachechmod 777とは、chmod (change mode)の略。 ファイルを誰でも「読む・書く・実行」が可能になります。Laravelには独自のキャッシュ機構があり、デフォルトでここにキャッシュが作成されていきます。
https://developers.gnavi.co.jp/entry/laravel/matsuyan
最後に
MAMPのDocument Rootを作ったファイルの中の「public」に設定します。理由は、publicにLaravelのトップ画面の設定があるから。これでブラウザーにて表示できます!お疲れ様です。
- 投稿日:2020-10-28T18:30:19+09:00
Laravel モデル
- 投稿日:2020-10-28T10:31:48+09:00
Laravel8 CRUD処理を使った投稿アプリを作成する その5 投稿詳細画面の作成
目的
- 投稿された内容の詳細を表示するページを作成する
実施環境
- 筆者の実施環境を記載する。
- ハードウェア環境
項目 情報 OS macOS Catalina(10.15.5) ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) プロセッサ 2 GHz クアッドコアIntel Core i5 メモリ 32 GB 3733 MHz LPDDR4 グラフィックス Intel Iris Plus Graphics 1536 MB
- ソフトウェア環境
項目 情報 備考 PHP バージョン 7.4.8 Homebrewを用いてこちらの方法で導入→Mac HomebrewでPHPをインストールする Laravel バージョン 8.6.0 commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする 前提条件
- その1の記事の内容が完了していること。
前提情報
- 作成するアプリ名は「laravel8_crud」とする。
- 作成するMySQLのデータベース名は「laravel8_crud_DB」とする。
- 下記に今回の作業のあとのソースコードのリモートリポジトリのリンクを記載する。
- 投稿された内容の詳細ページのURLはhttp://127.0.0.1:8000/detail/投稿IDとする。
概要
- ルーティング情報の記載
- コントローラファイルの記載
- ビューファイルの作成と記載
- 確認
詳細
ルーティングの記載
laravel8_crudディレクトリで下記コマンドを実行してルーティングファイルを開く。
$ vi routes/web.php開いたファイルに下記の行を追記する。
laravel8_crud/routes/web.phpRoute::get('/detail/{content_id}', [ContentController::class, 'detail'])->name('detail');追記後のルーティングファイルの内容を下記に記載する。
laravel8_crud/routes/web.php<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\ContentController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Auth::routes(); Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); Route::get('/input', [ContentController::class, 'input'])->name('input'); Route::post('/save', [ContentController::class, 'save'])->name('save'); Route::get('/output', [ContentController::class, 'output'])->name('output'); // 下記を追記する Route::get('/detail/{content_id}', [ContentController::class, 'detail'])->name('detail');コントローラファイルの記載
laravel8_crudディレクトリで下記コマンドを実行して作成したコントローラファイルを開く。
$ vi app/Http/Controllers/ContentController.php下記の内容をクラス内に追記する。
laravel8_crud/app/Http/Controllers/ContentController.phppublic function detail($content_id) { $content_get_query = Content::select('*'); $items = $content_get_query->find($content_id); return view('contents.detail', [ 'item' => $item, ]); }追記後のコントローラファイルの内容を下記に記載する。
laravel8_crud/app/Http/Controllers/ContentController.php<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Content; class ContentController extends Controller { public function input() { return view('contents.input'); } public function save(Request $request) { $input_content = new Content(); $input_content->content = $request['content']; $input_content->save(); return redirect(route('output')); } public function output() { $contents_get_query = Content::select('*'); $items = $contents_get_query->get(); return view('contents.output', [ 'items' => $items, ]); } // 下記を追記する public function detail($content_id) { $content_get_query = Content::select('*'); $items = $content_get_query->find($content_id); return view('contents.detail', [ 'item' => $item, ]); } // 上記までを追記する }ビューファイルの作成と記載
laravel8_crudディレクトリで下記コマンドを実行してビューファイルを作成する。
vi resources/views/contents/detail.blade.php
作成して開いたビューファイルに下記の内容を記載する。
laravel8_crud/resources/views/contents/output.blade.php<h1>detail</h1> <p>投稿ID: {{$item['id']}}</p> <p>投稿内容: {{$item['content']}}</p> <p>投稿時間: {{$item['created_at']}}</p>laravel8_credディレクトリで下記コマンドを実行して投稿内容の一覧ページのビューファイルを開く。
$ vi resources/views/contents/output.blade.php開いたビューファイルの
<p>{{$item['content']}}</p>
の次の行に下記の内容を追記する。laravel8_crud/resources/views/contents/output.blade.php<a href="{{route('detail', ['content_id' => $item['id']])}}">詳細</a>追記後のビューファイルの内容を下記に記載する。
laravel8_crud/resources/views/contents/output.blade.php<h1>output</h1> @foreach ($items as $item) <hr> <p>{{$item['content']}}</p> {{-- 下記を追記する --}} <a href="{{route('detail', ['content_id' => $item['id']])}}">詳細</a> @endforeach確認
laravel8_crudディレクトリで下記コマンドを実行してローカルサーバを起動する。
$ php artisan serveブラウザで下記にアクセスする。
下記の様に投稿内容が表示され「詳細」のリンクがあることを確認する。(投稿内容は下記画像と一致しなくて良い)
「詳細」のリンクをクリックすると下記のページが開くこと、各種データが正常に表示されていることを確認する。問題無く表示されれば本記事の作業は完了である。