Laravel5.7でcontorllerからmodelの呼び出し

mysqlにデータが入っており、controllerからmodelを呼び出してviewの*.blade.phpに表示させたい。

何をするか?こんなところでしょうか??(色々試していたら2日かかった)

1. mysqlにデータを入れる
2. modelから1で入れたテーブルを読み込む
3. controllerでmodelを読み込む
4. viewでmysqlのデータを表示する

1. mysqlにデータを入れる
まず、mysqlのtableにデータを挿入します。

INSERT INTO company(company_name, type, status) VALUES ('富士通', 1, 1),('リク ルート', 1, 1),('日本ユニシス', 1, 1);

2. modelから1で入れたテーブルを読み込む
app/Company.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    protected $table = 'company';
}

3. controllerでmodelを読み込む
use App\Company;でmodelを読み込みます。 App\Models\Company;だとエラーが出ます。ディレクトリがそのままと考えてよいでしょう。

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Company;

class CompanyIndexController extends Controller
{
    public function index(){
    	$data = new Company();
    	$table = $data::all();
    	return view('companyindex', ['data'=> $table]);
    }
}

4. viewでmysqlのデータを表示する
companyindex.blade.php
@foreachでcontrollerからpostする
$d->${カラム名}

@section('content')
      @foreach($data as $d)
      <li>{{$d->company_name}}</li>
      @endforeach
@endsection

反映されました。OK~~~~~~~~~~~~♪♪♪

さあ、次はbaldeからinputです。

mysqlで複数データをまとめてinsert

mysqlで複数データをinsertしたいとします。sql文はどう書けばいいのでしょうか?
insert into values の後を複数で繋げます。

INSERT INTO {table_name} (column_name1, column_name2) VALUES ('value1','value2'), ('value3', 'value4');

では実際にやってみましょう。まずsql文を作ります。データは適当に用意します。

INSERT INTO company(company_name, type, status) VALUES ('富士通', 1, 1),('リクルート', 1, 1),('日本ユニシス', 1, 1);

select * from でデータが入っているか確認します。

複数データが入っています。

AWS 踏み台サーバー(bastion)経由でSSH接続

踏み台サーバーの英語:bastion
英語名のbastionをそのままAWSのインスタンス名に使用することが多いかと思います。

踏み台サーバのセキュリティ
踏み台サーバーは、例えば アクセスする地域が限定されていてアクセスできない場合に、許可されている地域のサーバ経由でアクセスするなど、悪いイメージがあるかもしれませんが、アプリケーションのセキュリティ対策としては有効な手段の一つとなっています。

踏み台サーバーとは?
踏み台サーバーとは中継サーバーで、踏み台サーバーを経由してでないとターゲットのサーバーにアクセスできないようセキュリティグループを設定する。
踏み台サーバーからアクセスすれば、接続先のWebサーバに踏み台サーバから接続してきたと思わせることができる。

– パブリックIPをインスタンスに割り当てる必要がない
– アクセス制御の対象を踏み台サーバに限定できるため、運用負荷を軽減

AWSでの設定方法
1. VPCの作成
2. Subnetの作成(踏み台サーバ、アプリサーバ、データストア)
3. Internet Gateway
4. Route Tableの確認、設定
5. Security Groupの作成(踏み台サーバ、アプリケーションサーバ、DB用)
6. 踏み台サーバの構築

※セキュリティグループをそれぞれ作成する

MySQLでINDEXを貼るメリットと方法

indexとは何か?indexという言葉が頭に入ってこない。index.htmlと混合する。などなど。
indexは「あかさたな」でいうア行、サ行など、検索のショートカットと感がれば分かり易い。

MySQLでどんなケースだとINDEXを設定するのか?
– レコード(n)が多く、検索(O(n))に時間がかかっている
– それによってアプリケーションのパフォーマンスに影響が出る

イメージしやすいと思うが、select文での検索(O(n))の時間は Olog(n)となり、レコードの処理に時間がかかる。indexをおくと、全件検索しなくて済むので、処理時間が短くなる。

indexの種類は幾つかあるが、mysqlではB-TreeIndexが使用されている。

(あ、この図、検索アルゴリズムの本などで見たことある!!クイックソートだ。)
ということで、関連する書籍を「情報検索アルゴリズム」などのワードでamazonで調べると良いだろう。

インデックスをはると、クイックソートの並び替えが短縮されるので、処理が短くなるという算段だ。

インデックスの追加は

ALTER TABLE table_name ADD INDEX index_name(column_name);

ソフトウェアの開発プロセス

ソフトウェアの開発プロセス、開発手法というと、ウォーターフォールが一般的であろう。しかし、近年はアジャイル、スクラムといった開発手法が注目されているし、DevOpsなどのワードも一般的だ。ここで開発プロセスを整理したい。

ウォーターフォール型の開発
1. 基本設計→外部設計→内部設計→プログラム設計→プログラミング→テストという工程に分けて順に段階を追う。
– 管理しやすいが、行程を後戻りできない。

アジャイル開発
1.大きな単位でシステムを区切るのではなく、小単位で実装とテストを繰り返して開発を進めていく
– 開発期間が大幅に短縮され、不具合発生時の後戻り工数が少ない。ただし、厳密な方針を固めてないので、ぶれやすい。進捗を把握しにくく、コントロールが難しい。


では具体的に実装タスクをブレイクダウンしてみましょう。
1.実装
– 実装・GHEプルリク
– コードレビュー
– 修正対応

2.単体テスト
一つの関数の判定
– テスト仕様書
– コードレビュー
– 修正対応

3.結合テスト
– テスト仕様書作成
– テスト仕様書レビュー
– レビュー指摘対応
– テスト実施(不良対応)
– テスト結果確認
– 確認の指摘対応

4.受け入れテスト
– テスト仕様書作成
– テスト仕様書レビュー
– テスト実施
– 不良対応
– 不良対応確認

5.商用リリース
– 手順書作成
– 手順書レビュー
– 指摘対応
– リリース実施

大まかな流れを記載したが、開発タスクのサイズや方針によって変わってくると思う。

Laravel5.7に静的HTMLファイルを配置する

Laravel5.7で静的HTMLファイルを配置する場合

/resources/views配下の*.blade.php はcontrollerで呼び出しているので、viewsディレクトリではなく、/public配下に*.htmlを配置する。

例: help.htmlを置いてみます。

help.html

hello

htmlを確認すると、反映されています。