Laravel基礎・簡単なDB連携・フォーム

# 前提知識
- SSH
    - 暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。
- URI
    - URL⊂URI。URLとの違いはあんまり気にしなくていいかも。
- MVC 　[MVCを理解する](http://book.cakephp.org/2.0/ja/cakephp-overview/understanding-model-view-controller.html)
    - Model: ビジネスロジックを記述する。
    - View: Modelを表示する。
    - Controller: Viewの入力を受け取って判断し、Modelを起動する。

# Laravel入門
参考：　[ビギナーのためのLaravel入門](http://libro.tuyano.com/index2?id=3766003)

## Routing
「どのアドレスにアクセスしたら、どの処理を実行するか」を記述する。**routes.php**に記述する。
あくまでルート情報を管理するためのもの。

- 場所：　**/app/Http/routes.php**
- **Route::get( アドレス , 関数 )**
    - GETアクセスされた際のルーティングを設定する。
    - 第一引数のアドレスにアクセスすると、第二引数の関数が実行される。

## View
Laravelでは、画面の表示用のテンプレートをあらかじめ用意しておき、それを利用して画面表示を行うことができる。そのテンプレートの置き場所。

- 場所：　**/resources/views**
- **view**( テンプレート , 連想配列 )
    - テンプレートを表示する。変数に代入することもできる。

```php:routes.php内に記述
Route::get('/helo', function () {
    return view('helo',['message' => 'Hello!']);
});
```

```html:views/helo.php
<!doctype html>
<html>
<head>
    <title>Sample</title>
    <style>
    body { color:gray; }
    h1 { font-size:18pt; font-weight:bold; }
    </style>
</head>
<body>
    <h1>Sample</h1>
    <p><?php echo $message; ?></p>
</body>
```

##Controller
画面に表示する詳細などをすべてRoutingに記述するとごちゃごちゃする。
そこで、Controllerでテンプレートの処理などを行う。

- 場所：　**app/Http/Controllers**
- **Route::controller**( アドレス , コントローラー名 );
    - 指定されたアドレス下にアクセスされると、自動的にそのコントローラーに処理が渡される。

```php:routes.php内に記述
// ~.com/heloにアクセスされると、HeloControllerの関数inputに処理が渡される
Route::get('helo', 'HeloController@input');
```

```php:heloController.php
<?php
namespace App\Http\Controllers;
 
use Illuminate\Http\Request;
 
use App\Http\Requests;
use App\Http\Controllers\Controller;
 
class HeloController extends Controller
{
    public function input()
    {
        // views/helo.phpを表示する
　　　　return view('helo', ['message' => 'Hello!']);
    }
}
```

# Blade
- [laravel公式の文法事項](https://laravel.com/docs/5.0/templates)
細かい文法はここを参考に。

- [継承のやり方](http://shimabox.hatenablog.com/entry/2014/06/10/try_laravel_blade/)

```apple.php
@section('header')〜@stop
```

```orange.php
@yield('header')
```

apple.phpで記述した中身をorange.phpに出力できる

- [@parentの使い方](http://w.builwing.info/2012/10/31/laravel%E3%81%AEblade%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88/)
（よくわからん）

# DBの操作
## 参考
- [Laravel5 データベースの基本的な使用法](http://readouble.com/laravel/5/0/dev/ja/database.html)
- [Laravel5.1 保存・更新・削除など](https://readouble.com/laravel/5/1/ja/eloquent.html)

## app直下でDBや関数の定義をする
```php:(テーブル名).php
namespace App;

use Illuminate\Database\Eloquent\Model;

class (テーブル名) extends Model{
  //laravelでは必要
  const CREATED_AT = null;
  const UPDATED_AT = null;

  //primaryKeyがidの場合は指定しなくても良い
  protected $primaryKey = '(プライマリキー名)'
  protected $table = '(テーブル名)'
  //option
  protected $fillabel = ["(カラム名１)","(カラム名２)",...,"(カラム名X)"]
}

//関数（テーブル操作系）
public function ...
```

## Controllerで関数を呼び出す
```php:Controllers/hogeController.php
<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\(テーブル名_頭大文字);

//DB保存
$テーブル名 = new テーブル名;
$テーブル名->カラム名 = 変数;
.
.
.
$テーブル名->save();
```

# DBを検索して値を取得
[(参考)](https://readouble.com/laravel/5/1/ja/queries.html)

**HogeClassテーブル**

| column1 | column2 | column3 |
|:-:|:-:|:-:|
| ... | ... | ... |
| 欲しい値 | 検索ワード | ほげ |
| ... | ... | ... |

```php:例
$serchVal = "検索ワード";
$resultVal = Hogeclass::select('column1', 'column2')
      ->where('column2', '=', $searchVal)
      ->value("column1");
```
$resultValに”欲しい値”が格納されている。

# DBのレコードを並び替えてビューで表示する

- [Laravel5.1 DB：クエリービルダー](https://readouble.com/laravel/5.1/ja/queries.html)

例として、社員(shain)テーブルのレコードを主キー(id)降順で並び替える。
以下の関数をコントローラクラス内に追加。

```php:hogeController.php
public function hoge1(){
    $shains = Shains::orderBy('id', 'DESC')->get();
    return view('hogeView', ['shains' => $shains]);
  }
```

ビューでの呼び出し方。

```php:hogeView.blade.php
foreach ($shains as $shain) {
    echo $shain->name;
}
```

# laravelでフォームを作る
- [Laravel5でDB操作の基本（Eloquent ORM編）](http://qiita.com/zaburo/items/8826b8bd904a0a04d0be)
- [Laravel5でRequest各種（POST/GET値のやりとり）](http://qiita.com/zaburo/items/b80d4ae73efc99b41541)

## Routing(受け取り先の指定)
```php:routes.php
Route::get('/', 'indexController@input');
Route::post('res', 'indexController@res');
```
indexController.phpのres関数にpostする。

## Controller(フォームから受け取る)
```php:indexController.php　res関数
class indexController extends Controller{
  public function res(Request $request){
    //フォームから受け取る
    $フォームのname = $request->input('フォームのname');
      .
      .
      .
    //DB保存
  }
}
```
Requestクラスを使うのがlaravel5流らしい。

# その他
- PJ/storage/logsにエラーログが出ている。