🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

PHP

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

Q&A

解決済

1回答

4628閲覧

Laravel+MySQL+Vue.jsで、既存のデータベースをどうやってVueで表示できるのかがわからないです。

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

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

PHP

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

0グッド

0クリップ

投稿2020/11/22 08:48

編集2020/11/22 08:51

LaravelとMySQL初心者ですが、Laravel+MySQLで一覧表アプリを制作しています。
フロント側でVue.jsを使おうとしています。

困っていること

先に、LaravelとMySQLで、データベースを作成して、一覧で表示はできました。
これから、Vue.jsを使ってフロント部分を実装し、一覧表部分も表示を整えたいと考えています。

しかし、調べていくと、既存のデータベースを利用するのではなく、新たにデータベースを作成する(新規作成する)方法ばかりが掲載されており、よく分かりませんでした。

もし、ここからどのように処理していくべきなのか、ご存知の方がいらっしゃいましたら、手順だけでも構いませんので、ご教示頂けますと幸いです。

Vue.js自体の導入は済んでいます。
データベース名は、alcsで、テーブル名はalcです。

補足

welcome.blade.phpのコード

PHP

1<!DOCTYPE html> 2<html lang="{{ str_replace('_', '-', app()->getLocale()) }}"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 7 <title>Laravel</title> 8 9 <!-- Fonts --> 10 <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet"> 11 12 <!-- Styles --> 13 <style> 14 /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}a{background-color:transparent}[hidden]{display:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{box-sizing:border-box;border:0 solid #e2e8f0}a{color:inherit;text-decoration:inherit}svg,video{display:block;vertical-align:middle}video{max-width:100%;height:auto}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.border-t{border-top-width:1px}.flex{display:flex}.grid{display:grid}.hidden{display:none}.items-center{align-items:center}.justify-center{justify-content:center}.font-semibold{font-weight:600}.h-5{height:1.25rem}.h-8{height:2rem}.h-16{height:4rem}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.leading-7{line-height:1.75rem}.mx-auto{margin-left:auto;margin-right:auto}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.ml-4{margin-left:1rem}.mt-8{margin-top:2rem}.ml-12{margin-left:3rem}.-mt-px{margin-top:-1px}.max-w-6xl{max-width:72rem}.min-h-screen{min-height:100vh}.overflow-hidden{overflow:hidden}.p-6{padding:1.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.pt-8{padding-top:2rem}.fixed{position:fixed}.relative{position:relative}.top-0{top:0}.right-0{right:0}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.text-center{text-align:center}.text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.underline{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-5{width:1.25rem}.w-8{width:2rem}.w-auto{width:auto}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:640px){.sm\:rounded-lg{border-radius:.5rem}.sm\:block{display:block}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:h-20{height:5rem}.sm\:ml-0{margin-left:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pt-0{padding-top:0}.sm\:text-left{text-align:left}.sm\:text-right{text-align:right}}@media (min-width:768px){.md\:border-t-0{border-top-width:0}.md\:border-l{border-left-width:1px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (prefers-color-scheme:dark){.dark\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.dark\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.dark\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.dark\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.dark\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}} 15 </style> 16 17 <style> 18 body { 19 font-family: 'Nunito'; 20 } 21 </style> 22 </head> 23 <body class="antialiased"> 24 <div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center sm:pt-0"> 25 @if (Route::has('login')) 26 <div class="hidden fixed top-0 right-0 px-6 py-4 sm:block"> 27 @auth 28 <a href="{{ url('/home') }}" class="text-sm text-gray-700 underline">Home</a> 29 @else 30 <a href="{{ route('login') }}" class="text-sm text-gray-700 underline">Login</a> 31 32 @if (Route::has('register')) 33 <a href="{{ route('register') }}" class="ml-4 text-sm text-gray-700 underline">Register</a> 34 @endif 35 @endif 36 </div> 37 @endif 38 <div id="app"> 39 <example-component></example-component> 40 </div> 41 42 <div style='color: white;'> 43 <a href="{{ url('/alc') }}">Alc</a> 44 </div> 45 </div> 46 <script src=" {{ mix('js/app.js') }} "></script> 47 </body> 48</html>

web.phpのコード

PHP

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

AlcController.phpのコード

PHP

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6 7use Illuminate\Support\Facades\DB; 8 9class AlcController extends Controller 10{ 11 public function alcList(Request $request) { 12 $items = DB::select('select * from alc'); 13 return view('alcList', ['items' => $items]); 14 } 15} 16

利用環境

PC:macOS Big Sur(バージョン:11.0.1)

エディタ:VSCode

ブラウザ:Google Chrome

compposer.json一部抜粋

"require": { "php": "^7.3|^8.0", "fideloper/proxy": "^4.4", "fruitcake/laravel-cors": "^2.0", "guzzlehttp/guzzle": "^7.0.1", "laravel/framework": "^8.12", "laravel/tinker": "^2.5", "laravel/ui": "^3.1" },

package.json一部抜粋

"devDependencies": { "axios": "^0.19", "bootstrap": "^4.0.0", "cross-env": "^7.0", "jquery": "^3.2", "laravel-mix": "^5.0.1", "lodash": "^4.17.19", "popper.js": "^1.12", "resolve-url-loader": "^3.1.2", "sass": "^1.20.1", "sass-loader": "^8.0.0", "vue": "^2.5.17", "vue-template-compiler": "^2.6.10" }

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

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

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

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

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

guest

回答1

0

ベストアンサー

サーバーサイド(Laravel)からはjsonを出力。
フロント(Vue.js)ではjsonを受け取って表示。
細かいことの前にこの概念の理解が最初に必要。
LaravelやVue以外でも使える知識を増やさないと意味がない。

これを学習する時は完全に分離して考える。

Laravel

新しいルートとコントローラーを作る。
(ここでroutes/api.phpに書くのはよくある間違い。web.phpでいい。)

php

1Route::get('api/alc', 'App\Http\Controllers\Api\AlcController@alcList');

「コントローラーからEloquentモデルを返せばそのままjsonになる」はLaravel限定の知識。

php

1<?php 2 3namespace App\Http\Controllers\Api; 4 5use App\Http\Controllers\Controller; 6use App\Models\Alc; 7use Illuminate\Http\Request; 8 9class AlcController extends Controller 10{ 11 public function alcList(Request $request) { 12 return Alc::all(); 13 } 14}

ブラウザで/api/alcを見ればjsonが表示されている。
Laravelならシンプルにjsonを出力するだけなら簡単。
サーバーサイドでの役割はここまで。

$items = DB::select('select * from alc');なんて使ってる時点でLaravelの学習が足りないのでVueの前にもっとLaravelを触ったほうがいい。

Vue

「JSでのhttpリクエストにはaxiosを使うのが標準」って知識がないと
せっかくLaravelが最初からpackage.jsonにaxiosを書いてても理解できない。

Vueとaxiosの使い方にLaravelは何も関係ない。
axiosの使い方ならいくらでも情報があるので簡単に調べられる。
「LaravelでのVueとaxiosの使い方」で調べると一気に使えない情報しかなくなるはずなので
あくまで単体でLaravelとは関係ない情報を調べるのが大事。

投稿2020/11/22 10:27

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/11/23 08:29

kawaxさん ご回答くださり、ありがとうございます。無事、表示できました。 $items = DB::select('select * from alc');は、Laravel学習で使っている参考書(2020年出版)のものをそのまま使ってしまいました...。 Laravel学習もかねて、これから今回のように、アプリ作成をしていこうと思っていたので、とてもレベルの低い質問になってしまい、すみませんでした。(Vueは学習ずみだったのですが、まだまだですね。) お騒がせしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問