質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

872閲覧

laravel データベースからデータ取得の仕方

kokok

総合スコア145

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2020/03/17 15:45

php

1//login.blade.php 2 3<!DOCTYPE html> 4<html lang="ja"> 5 <head> 6 <meta charset="utf-8"> 7 <title>ログインページ</title> 8 </head> 9 <body> 10<h1>ログイン</h1> 11<form class="" action="{{url('/user_top_page')}}" method="post"> 12<label for="name">ニックネーム:</label> 13<input type="text" name="user_name" id="name"> 14<label for="pass">パスワード:</label> 15<input type="password" name="password" id="pass"> 16<button type="button" name="button">ログイン</button> 17</form> 18<form class="" action="{{url('/create_user')}}" method="get"> 19<button type="submit" name="button">新規ユーザ作成</button> 20</form> 21 </body> 22</html> 23 24

php

1 2<?php 3 4use Illuminate\Support\Facades\Route; 5 6/* 7|-------------------------------------------------------------------------- 8| Web Routes 9|-------------------------------------------------------------------------- 10| 11| Here is where you can register web routes for your application. These 12| routes are loaded by the RouteServiceProvider within a group which 13| contains the "web" middleware group. Now create something great! 14| 15*/ 16 17 18 19Route::post('/user_top_page', 'UserController@user_top_page'); 20 21 22 23

php

1//UserController.php 2<?php 3 4namespace App\Http\Controllers; 5 6use Illuminate\Http\Request; 7use App\User; 8use App\Http\Requests\UserRequest; 9 10 11 12 13 14class UserController extends Controller 15 16{ 17 // 18 public function create(){ 19 20 return view('user.create_user'); 21 } 22 23 24 public function create_user(UserRequest $request){ 25 26 $user = new User(); 27 $user->user_name = $request->user_name; 28 $user->password = $request->password; 29 $user->profile = $request->profile; 30 $user->save(); 31 return redirect('/login'); 32 } 33 34public function user_top_page(UserRequest $request){ 35 36} 37} 38

php

1 2//User.php 3<?php 4 5namespace App; 6 7use Illuminate\Database\Eloquent\Model; 8 9class User extends Model 10{ 11 // 12 protected $fillable = ['user_name', 'password', 'profile']; 13 14public function login_check($user_name, $password){ 15 16$result = DB::table('users')->where('user_nme', $user_name)->where('password', $password); 17} 18 19 20} 21

現在,laravelの学習でコードを書き始めたばかりで初歩的な質問となると思いますが、すみません。

laravel(フレームワーク)には、ログインに関する機能はあると思うのですが、勉強のためにデータベースからのデータの取得など自分で書いてみたいので、上記のコードで書いてみようとしています。

質問点ですが、

1、ログインしたいユーザからユーザ名やパスワードを受け取り
それを、Controllerの方で データベースからデータを持ってきて、入力されたデータと一致するものがあるかを判定するのか、
もしくは、Model で login_check などのメソッドを作成してそのメソッドをcontrollerから呼び出してチェックするのかどちらがいいのでしょうか?
もしくは、もっとこうやった方がいいなどあったらアドバイスいただけたらと思います。

2,データベースからデータを取得する場合(条件)

$name = DB::table('users')->where('name', 'taro');

上記のような書き方で良いのでしょうか?

&&などの条件の場合 や データがないときの戻り値は何になるのでしょうか?

Laravel Framework 7.1.3ですが、 リファレンスするものが あまり見つけきれなかったのでアドバイスいただけると幸いです。

sqlite 3.28.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

  1. ログインしたいユーザからユーザ名やパスワードを受け取り ...

フレームワークをどう使うかはその人次第です。 Eloquent Model を一切使わない縛りの開発も見たことがあるので,それもまた1つのやり方です。

但しあくまで個人的には, Eloquent Model を一切使わないなら Laravel はおろか PHP をやめて他のもっと速い言語で書いたほうが良い ぐらいにまで思っているので,基本は Eloquent Model を使うと思います。

方法としては3通りぐらいです。普通の開発なら一番上が選ばれると思います。
(もちろん勉強のために他の方法を敢えて選ぶのは全然アリです)

  • Auth モジュールに乗っかる (これは基本的に Eloquent Model ベース)
  • Eloquent Model を自分で使う
  • Query Builder を生で使う
  1. データベースからデータを取得する場合(条件)

この文脈で where を呼んだ段階では Illuminate\Database\Query\Builder のインスタンスが返ってきており, first()get() を呼ぶまでは取得されません。

  • first() → 1件取得試行し,存在した場合は stdClass, 存在しない場合は NULL が返る
  • get() → 全件取得し, \Illuminate\Support\Collection のインスタンスが返る

php

1$user = DB::table('users')->where('name', 'taro')->first();

また, Eloquent Model を使う場合は以下のようになります。
(分かりやすいように丁寧な書き方をしています)

$user = User::query()->where('name', 'taro')->first();

この文脈で where を呼んだ段階では Illuminate\Database\Eloquent\Builder のインスタンスが返ってきており, first()get() を呼ぶまでは取得されません。

  • first() → 1件取得試行し,存在した場合は User, 存在しない場合は NULL が返る
  • get() → 全件取得し, \Illuminate\Database\Eloquent\Collection のインスタンスが返る

Query Builder と Eloquent Builder の関係性に関してはこちらをご覧ください。

投稿2020/03/17 19:55

編集2020/03/17 19:58
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kokok

2020/03/24 13:58

回答ありがとうございました。 遅くなりましたが、とても参考になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問