laravel 基本的な検索、削除、登録、更新

プログラムのコツは、
できるだけシンプルに作ること。
ある機能をすべて使おうなどしないほうがいい。

ということで、まぁ必要だろうと思う検索をまとめました。


#準備

##モデルを作成

```app/Nikki.php

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;

class Nikki extends Model
{
}

?>

```

##コントローラー作成

```Http/Controllers/NikkiController.php

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Route;
use Log;

//使いたいモデルを指定
use App\Nikki;

class NikkiController extends Controller
{
    public function show()
    {
        $res = Nikki::query()
            ->get();
        return view('nikki.show', ['res' => $res]);
    }

}

?>

```

##そして表示

```

@foreach ($res as $v)
<div class="card mb-2">
    <div class="card-body">
        <h4 class="card-title">{{ $v->title }}</h4>
        <h6 class="card-subtitle mb-2 text-muted">{{ $v->updated_at }}</h6>
        <p class="card-text">{{ $v->body }}</p>
    </div>
</div>
@endforeach


```

#つづいてクエリ


### すべて取得

```

$res = Nikki::query()
            ->get();


```

### ID 100 のみ

```

$res = Nikki::query()
            ->where('id',100)
            ->get();


```



###  ( IN 句 ) ID が 100 もしくは 101

```

$res = Nikki::query()
        ->whereIn('id',[100,101])
        ->get();


```


### created_at が 2018-08-24 より新しい

```

$res = Nikki::query()
    ->where('created_at','>','2018-08-24')
    ->get();


```


### body が アニメにマッチ

```

$res = Nikki::query()
    ->where('body','LIKE','%アニメ%')
    ->get();


```



### body が アニメにマッチ、 created_at が NULL


```

$res = Nikki::query()
    ->where('body','LIKE','%アニメ%')
    ->where('created_at',NULL)
    ->get();



```

### ( OR 検索 ) ID が 102 もしくは created_at が NULL

```

$res = Nikki::query()->where(function($q){
            $q->where('id', 102)
                ->orWhere('created_at', NULL); // idが102 もしくは created_at が NULLのものを取得
        })->get();



```

### (OR 検索 キーワードを渡す) title か body に アニメが含まれる

```

$word = 'アニメ';

$res = Nikki::query()->where(function($q) use ($word){
    $q->where('title', 'LIKE', "%$word%")
        ->orWhere('body', 'LIKE', "%$word%");
})->get();


```




### 並び替え created_at が 古い順

```

$res = Nikki::query()
            ->orderBy('created_at','asc')
            ->get();


```


### ( LIMIT句 )件数を指定 3件取得

```

$res = Nikki::query()
            ->take(3)
            ->get();


```


### ( COUNT句 ) 件数を数える

```

$res = Nikki::query()->count();


```

# 削除

```

//        レコードを削除
        Nikki::query()
//            where句をつけ忘れるとすべて消えてしまうので注意
            ->where('id','>',500)//レコードが無い場合はエラーにもならない
            ->delete();


```




### データを書き込む

```

      $nikki = new Nikki;
      $nikki->title = "エロ本 ver .".time();
      $nikki->body = "時間は".time()."ここにデータ";
      $nikki->save();


```

### validate しつつ、データを更新

```

        if($request->all()){

            $validatedData = $request->validate([
                'title' => 'required|max:255',
                'body' => 'required',
            ]);

            $nikki = new Nikki;

            if(!empty($request->id)){
                $nikki = Nikki::find($request->id);
            }

            $nikki->title = $request->title;
            $nikki->body = $request->body;
            $nikki->save();

            $request->session()->flash('status', '登録したよ');
            return redirect(url()->previous());//リファラである、/nikki/add/へリダイレクト


```


#created_at のタイムスタンプのみ更新

```

if(!empty($request->id)){
            $save = Social::find($request->id);
        }
        
        $save->created_at = new \DateTime();
        $save->save();

```