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

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

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

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

312閲覧

Lalaravelのviewでセレクトボックスの連携をしたい

kazuya12

総合スコア35

Laravel

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

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/08/12 19:18

前提

現在、Laravel8にて商品一覧ページを作成しています。
そこに、2つのセレクトボックスを配置し、親カテゴリのセレクトボックスと子カテゴリのセレクトボックスを作っています。
親カテゴリには、primary_categoriesテーブルからidとnameを取得し、Controllerからviewに渡しています。secondary_categoriesカテゴリという子カテゴリのテーブルも存在します。
2つはリレーションで繋がっています。
view側は商品一覧ページを表示していて、productsテーブル(商品情報)としてsecondary_category_idカラム(secondary_categoriesのid)を持っています。

primary_categoriesテーブル

idname
1雑貨
2雑貨
3アート

secondary_categoriesテーブル

idnameprimary_category_id
1パン1
2スウィーツ1
3お弁当1
4生活雑貨2
5アクセサリー2
63
7音楽3

実現したいこと

上記の商品一覧ページに、親カテゴリのセレクトボックスを選択すると、動的に子カテゴリのセレクトボックスの内容が親カテゴリの選択によって変わるようにしたいです。
色々ネットで調べてみたのですが、HTMLではJavaScriptを使用して動的に表示を変える、という所はいくつか見つかったのですが、Controllerから渡された親カテゴリと子カテゴリをどうやってJavaScriptで操作させるかのコーディングで悩んでいます。
ネットにはjQueryでの情報はいくつかあったのですが、
前提条件としてjQueryは利用しないというのがありますので、JavaScriptで実装したいです。

該当のソースコード

ProductController.php indexメソッド内 $products = Product::select('id','name','secondary_category_id')->get(); $categories = PrimaryCategory::with('secondary')->get(); $s_categories = SecondaryCategory::select('id','name')->get(); return view('user.item.index', compact('products','categories','s_categories'));
user/item/index.blade.php <select id="p_category" class="mb-2 lg:mb-0 lg:mr-2 rounded"> <option value="0" @if(\Request::get('p_category') === '0') selected @endif>全て</option> @foreach($categories as $p_category) <option value="{{ $p_category->id}}" @if(\Request::get('p_category') == $p_category->id) selected @endif> {{ $p_category->name }} </option> @endforeach </select> <select id="s_category" class="mb-2 lg:mb-0 lg:mr-2 rounded"> <option value="0" @if(\Request::get('s_category') === '0') selected @endif>全て</option> @foreach($s_categories as $s_category) <option value="{{ $s_category->id}}" @if(\Request::get('s_category') == $s_category->id) selected @endif> {{ $s_category->name }} </option> @endforeach </select>

上記のコードはとりあえず親カテゴリと子カテゴリを表示するために用意してあるもので、
完成させたいのは、親カテゴリ選択によって子カテゴリを絞り込み表示させたいです。

補足情報(バージョンなど)

Laravel8
PHP8.0
MySQL5.3

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

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

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

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

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

guest

回答1

0

今ぱっと思いついたのだけで3パターン考えられますね

  1. 親カテゴリが変わるたびに子カテゴリ一覧をajaxで取得して子カテゴリのselectに反映(カテゴリが大量にあるならこれ)
  2. 子カテゴリ一覧を配列もしくはオブジェクトという形で収めたJavaScriptコードを出力し、親カテゴリが変わるたびに変数からselectに反映
  3. あらかじめ子カテゴリが入ったselectのHTMLを非表示ですべて出力し、親カテゴリが変わるたびに表示させるselectを切り替える

どれも一長一短ですかね・・・

jQueryで気に入ったサンプルがあるのなら下のような変換集を参考に移植するのも一つの手です。(「脱jquery」で検索しただけ)
https://zenn.dev/kobito/articles/5e246e85615435
https://wemo.tech/2101

投稿2022/08/13 00:55

RiaFeed

総合スコア2701

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問