↓上記の内容は事前に用意したデータベース(mysql)から取得したい。
vue.js側
Javascript部分
//hoge.vue
data() {
return {
selected: [], // Must be an array reference!
options: [],
};
},
methods: {
getRejectedReasons() {
axios.get("/api/stocks/getRejectedReasons").then(response => {
this.options = []
let options = response.data;
options.filter((options) => {
this.options.push({
value: options.reason,
text: options.reasonText,
});
});
})
}
},
mounted() {
this.getRejectedReasons()
}
選択した内容のvalueが、this.selected
という変数に格納される設計にしている。
データベースからレコードごとにvalueカラムとtextカラムを取得して、this.options
というオブジェクト配列に格納する。
this.options
をconsole.logで確認すると、
こんな風になる。
html部分
//hoge.vue
<b-form-group label="理由" v-slot="{ ariaDescribedby }">
<b-form-checkbox-group v-model="selected" :options="options"
:aria-describedby="ariaDescribedby" name="flavour-2a" stacked>
</b-form-checkbox-group>
</b-form-group>
bootstrap-vueというフレームワークの書き方なので、いい感じに修正してほしい。
変数options
の中身はオブジェクト配列で、選択肢ごとのvalueとてtextが格納されている。
selectタグの時もやることは大して変わらない。
Laravel側
コントローラー
//HogeController.vue
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Rejected_reason;
class ApprovalController extends Controller
{
public function getRejectedReasons(Request $request,Rejected_reason $Rejected_reason){
$Rejected_reason = $Rejected_reason->all();
return $Rejected_reason;
}
}
モデル
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Rejected_reason extends Model
{
protected $guarded = ['id'];
use HasFactory;
}
モデルはあんまり触ってない。
なぜわざわざ選択肢をデータベースから取得するのか
今後オプションの選択肢をブラウザ上からの操作で動的に増減させたり、変更したりすることを想定するなら、そうしたほうがいいと思ったから。
後はいろんなページでこのオプションを使いまわす なんてときにも便利かも。
もちろん簡単な内容なら、Vueファイル自体のdata()の中に書いてもいい。
ていうか特別な事情がなかったらそうすると思う。
あんまり後から選択肢を編集することを想定していないなら、jsonファイルに書いてどっかに保存しておいて呼び出す
なんて方式でもいい。
やってみ?