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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Laravel

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

Q&A

0回答

847閲覧

データベースに複数のデータを格納したい場合(Laravel,sqlite)

kokok

総合スコア145

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Laravel

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

0グッド

1クリップ

投稿2020/03/26 13:30

html

1 2//article_submission.blade.php 3 4 5<!DOCTYPE html> 6<html lang="ja" dir="ltr"> 7 <head> 8 <meta name="viewport" content="width=device-width,initial-scale=1"> 9 <meta charset="utf-8"> 10 <link rel="stylesheet" href="/css/normalize.css"> 11 <link rel="stylesheet" href="/css/style.css"> 12 <title>記事のアップロード</title> 13 </head> 14 <body> 15 <form class="" action="{{url('user/user_top_page')}}" method="get"> 16 <button type="submit">トップページ</button> 17 </form> 18<h1>記事のアップロード</h1> 19<form class="" action="{{url('article/article_upload')}}" method="post"> 20@csrf 21 22<p> 23 <label for="pass">タイトル:</label> 24 <input type="text" name="article_title"> 25 26</p> 27 28{{--<p> 29 <label for="pass">検索タグ:</label> 30 <input type="text" name="search_tag"> 31</p> --}} 32<p> 33 34 <label for="contact">検索タグ(複数選択可):</label> 35 <select id="contact" name="search_tag" multiple size="5"> 36 <option value="php" selected>php</option> 37 <option value="html" selected>html</option> 38 <option value="css" selected>css</option> 39 <option value="javascript" selected>javascript</option> 40 <option value="laravel">laravel</option> 41 </select> 42 43</p> 44<p class="interval"> 45 <label for="profile">記事内容:</label> 46 47 <textarea class="article_content"name="article_content" placeholder="content" rows="100" cols="80"></textarea> 48</p> 49<button type="submit" >記事投稿</button> 50</form> 51 </body> 52</html> 53

php

1//ArticleController.php 2 3<?php 4 5namespace App\Http\Controllers; 6 7use Illuminate\Http\Request; 8use App\Article; 9use App\Http\Requests\ArticleRequest; 10class ArticleController extends Controller 11{ 12 // 13 14public function article_upload(ArticleRequest $request ){ 15 16$article = new Article(); 17$article->title = $request->article_title; 18$article->content = $request->article_content; 19$article->tag = $request->search_tag; 20 $article->author = $request->session()->get('session_user_id'); 21 22$article->save(); 23 24return view('user.user_top_page'); 25 26 } 27} 28

php

1//web.php 2<?php 3 4use Illuminate\Support\Facades\Route; 5Route::post('article/article_upload', 'ArticleController@article_upload'); 6

php

1 2//マイグレーション 3<?php 4 5use Illuminate\Database\Migrations\Migration; 6use Illuminate\Database\Schema\Blueprint; 7use Illuminate\Support\Facades\Schema; 8 9class CreateArticlesTable extends Migration 10{ 11 /** 12 * Run the migrations. 13 * 14 * @return void 15 */ 16 public function up() 17 { 18 Schema::create('articles', function (Blueprint $table) { 19 $table->id(); 20 //記事タイトル 21 $table->string('title'); 22 //記事内容 23 $table->text('content'); 24 //記事作成者 25 $table->integer('author'); 26 //記事カテゴリー 27 // $table->json('tag')->nullable(); 28 $table->string('tag'); 29 30 $table->integer('nice')->nullable(); 31 $table->timestamps(); 32 }); 33 } 34 35 /** 36 * Reverse the migrations. 37 * 38 * @return void 39 */ 40 public function down() 41 { 42 Schema::dropIfExists('articles'); 43 } 44} 45 46

formのselectタグなどのデータが複数ある場合、どのような形でデータベースに保存すれば良いか分かりませんでした。

複数のデータを分けてデータベースに入れるとデータベースの行が多くなってしまう気がします。

こういう場合は、オブジェクト?配列?json? などの形式でデータベースに格納した方がいいのでしょうか?

アドバイスいただけると幸いです。

Laravel Framework 7.1.3
sqlite 3.28.0

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

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

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

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

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

m.ts10806

2020/03/26 13:36

要件次第です。 「何を作るか」詳細が決まってないと「どうやって作るか」にはならないと思います。
kokok

2020/03/26 13:49

そうですよね。 記事を見れるようなものを作ろうとしていて、記事を投稿するときに、タグで検索できるようにtagを付けたいと考えております。その時、複数のtagを付けて投稿した場合、そのtagをデータベースでどう格納するかで引っかかってしまいました。 すみません、もう少し自分で考えてみます。
m.ts10806

2020/03/26 13:51

そこをきちんと記載しておいてください。 ただ、設計が先でしょうね。データの持ち方の問題です。 データの持ち方決まってないとコードは書けません。
kokok

2020/03/26 14:15

ただ、設計が先でしょうね >>コードを書いてて思いました。 もっと、データベースのカラムなど、何が必要でどういう風に扱うかを考えてコードを書いていこうと思います。 ありがとうございます。 ちなみにですが、複数のtagなど分けてデータベースに格納する場合、データベースの行、もしくは、カラムが増えてしまうと思いますが(tagが多数あった場合など特に)、行やカラムが増えるすぎるのは、あまり良くないですよね? 新たに、tagテーブルみたいなどを作成するなどしてもテーブルが増えてしまうので。
m.ts10806

2020/03/26 14:18

不定の長さのカラムを用意するくらいであれば、テーブルがあったほうがいいです。 タグにも番号をつけて管理した方が軽いでしょう。 ・投稿テーブル ・投稿タグ紐づけテーブル ・タグテーブル 役割分担の観点からすると、外に出せるものは出した方が良いです。 きちんとリレーション貼ることは必須ですが、何でもかんでも詰め込むのはよろしくありません。
kokok

2020/03/26 14:28

ありがとうございます。 テーブルなど、データベースの設計をどうするか、もう少し自分で考えてみます。
m.ts10806

2020/03/26 14:33

まぁタグなりカテゴリーなりまさにteratailは動くお手本のようなものですから、 色んな関連のページ(タグ一覧とかも)の挙動を確認して、データの流れとかを想像して 設計してみると良いと思います。 メモ程度でもあれば全然作りやすさが違ってきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問