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

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

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

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

5600閲覧

LaravelのControllerにおけるテーブルの指定方法

okurasuta

総合スコア37

Laravel

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

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/01/09 00:38

編集2020/01/09 00:41

LaravelのControllerでは基本の基本では以下のように書くとおもいます。

PHp

1 2<?php 3 4namespace App\Models; 5 6use Illuminate\Database\Eloquent\Model; 7use Illuminate\Support\Facades\DB; 8 9class Frameworks extends Model 10{ 11 protected $table = 'frameworks'; 12 13 protected $guarded = array('id'); 14 15 public $timestamps = false; 16 17 public function getData() 18 { 19 $data = DB::table($this->table)->get(); 20 21 return $data; 22 } 23} 24

出典

例えば、一つのコントローラの別のクラスで別のテーブルを使いたい場合、以下のような指定方法があるようですが、これは正しいのでしょうか?

動作自体はしますが同様の記述方式を用いたサイトが他に見つけられず、何か他の記法があるのではないかお伺いしたいです。

PHP

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\User; // Userモデルを呼び出す 7 8class UserController extends Controller 9{ 10 public function index() 11 { 12 $user = User::first(); // Userモデル(usersテーブル)で一番最初にヒットするデータをコレクションで返す 13 14 dd($user->name); // nameの値をデバッグ 15 } 16}

出典

PHP

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\User; // Userモデルを呼び出す 7use App\Hoge; // Userモデルを呼び出す 8 9class UserController extends Controller 10{ 11 public function index() 12 { 13 $user = User::first(); // Userモデル(usersテーブル)で一番最初にヒットするデータをコレクションで返す 14 15 dd($user->name); // nameの値をデバッグ 16 } 17 18 public function hoge() 19 { 20 $user = Hoge::first(); // Userモデル(usersテーブル)で一番最初にヒットするデータをコレクションで返す 21 22 dd($user->content); // nameの値をデバッグ 23 } 24 25}

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/01/09 14:55

もらった回答にリアクションもしないのですか?
guest

回答4

0

ベストアンサー

突っ込みどころが多すぎて困っちゃいますね。

LaravelのControllerでは基本の基本では以下のように書くとおもいます。

提示されたModelから色々指摘事項が・・・

php

1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Model; 6use Illuminate\Support\Facades\DB; 7 8// class Frameworks extends Model 9class Framework extends Model // モデル名は通常単数形 10{ 11 // protected $table = 'frameworks'; // クラス名を複数形にするのがデフォルトなので、書かなくていい 12 13 // protected $guarded = array('id'); 14 protected $guarded = ['id']; // array の指定は [] で。 15 16// public $timestamps = false; // public だめ 17 protect $timestamps = false; 18 19// Framework::all() で同じことできるしかも定義済み 20// public function getData() 21// { 22// $data = DB::table($this->table)->get(); 23// 24// return $data; 25// } 26}

Controller に持つ、メソッドは以下の形が、デフォルトになっている。

https://readouble.com/laravel/5.8/ja/controllers.html

基本的には、以下に示した8個のメソッドでCRUDが作成されます。

イメージ説明

上記のモデルを作成した後、

php artisan make:controller FrameworkController -m Models/Framework -r

を実行してコントローラーを作成すれば、上記のメソッドが全て出力され、以下のように実装すれば、CRUDが機能します。

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Models\framework; 7use Illuminate\Http\RedirectResponse; 8use Illuminate\View\View; 9 10/** 11 * Class frameworkController 12 * @package App\Http\Controllers 13 */ 14class FrameworkController extends Controller 15{ 16 /** 17 * @return View 18 */ 19 public function index() 20 { 21 $frameworks = Framework::query()->paginate(); 22 return \view('frameworks.index', compact('frameworks')); 23 } 24 25 /** 26 * @return View 27 */ 28 public function create() 29 { 30 return \view('frameworks.create'); 31 } 32 33 /** 34 * @param Request $request 35 */ 36 public function store(Request $request) 37 { 38 $framework = new Framework(); 39 $framework->fill( 40 $request->all() 41 )->save(); 42 return \redirect()->route('frameworks.show', compact('framework')); 43 } 44 45 /** 46 * @param Framework $framework 47 * @return View 48 */ 49 public function show(Framework $framework) 50 { 51 return \view('frameworks.show', compact('framework')); 52 } 53 54 /** 55 * @param Framework $framework 56 * @return View 57 */ 58 public function edit(Framework $framework) 59 { 60 return \view('frameworks.edit', compact('framework')); 61 } 62 63 /** 64 * @param Request $request 65 * @param framework $framework 66 * @return RedirectResponse 67 */ 68 public function update(Request $request, Framework $framework) 69 { 70 $framework->fill( 71 $request->all() 72 )->save(); 73 74 return \redirect()->route('frameworks.show', compact('framework')); 75 } 76 77 /** 78 * @param Framework $framework 79 * @return RedirectResponse 80 * @throws \Exception 81 */ 82 public function destroy(Framework $framework) 83 { 84 $framework->delete(); 85 return \redirect()->route('frameworks.index'); 86 } 87} 88

投稿2020/01/09 01:40

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

すでに出ていますが逆にこの書き方はほとんどしないかなと

php

1 public function getData() 2 { 3 $data = DB::table($this->table)->get(); 4 5 return $data; 6 }

プロジェクトにもよるかもしれませんが以下の書き方のほうが一般的なきがします

php

1$user = User::first();

ちなみに参考する際はリーダブルが参考になりますよ
データベース:クエリビルダ 5.8 Laravel
Eloquent:利用の開始 5.8 Laravel

投稿2020/01/09 01:31

sola-msr

総合スコア876

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

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

0

まずこんな使い方は誰もしてない。基本でもなんでもなくLaravelでは完全に間違ったやり方。そのサイトは間違いだらけなので見てはいけない。

php

1 public function getData() 2 { 3 $data = DB::table($this->table)->get(); 4 5 return $data; 6 }

後半のこっちは正しい。
https://udemy.benesse.co.jp/development/web/laravel-model.html

Hogeのほうはただの書き間違いだろうけど

php

1 public function hoge() 2 { 3 $hoge = Hoge::first(); 4 5 dd($hoge->content); 6 }

投稿2020/01/09 01:20

kawax

総合スコア10377

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

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

0

動作していたら問題ないのでは?それは「正しい」と言えるのでは?
ひとつのことを実現するための手段はひとつではありませんし、「他の記述方法」をどのレベルで求めているのかわかりません。

発想次第で如何様にもなるものなので、どこかの知らない誰かが書くとは限りませんし、あったとして鵜呑みにしてはいけません。

あと、結局のところ要件次第です。
「なぜそうしたいのか」「なにをしたいためなのか」
もっも具体的に記載してください。

投稿2020/01/09 01:00

m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問