今回はlaravel-adminの多対多(many-to-many)でよく陥るエラーの見直しポイントを。
基本的な多対多の実装の仕方は、他のブログが優秀なので基本の説明は譲ります。
Laravel 5.7 Laravel-admin リレーションを追加する
が、僕はこれではうまくいきませんでした。
DBのエラーが出るのですよ。。
そんな時の見直しポイントはこの2点。
- モデルのbelognsToManyの第二引数に、中間テーブルのテーブル名をつける
- multipleSelectの引数は複数形にする
まずは完成のソースコードから。
laravel-adminのコントローラ
Admin/Controller/TagMovieController.php protected function form($id = null) { $form = new Form(new Movie); $form->text('title', 'タグ名'); # 上記のブログだと単数のtagになるけど、うまくいくのは複数形。ちなみに公式リファレンスでも複数形ですよ。と。 $form->multipleSelect('tags')->options(Tag::pluck('name', 'id')); return $form; }
モデルファイル
app/Movie.php public function tags() { // 第二引数に中間テーブル名を宣言しといたほうが安全。 // なんか、SQLのtableが存在しません系のエラーはこれで解決した。 return $this->belongsToMany('App\Tag', 'movie_tags'); }
やっぱり公式リファレンス見ないとダメですね。
個人ブログは素晴らしいんですけど、それを信じ切ってしまうとエラーを解決するのに余計、時間がかかっちゃう。
ということで公式リファレンスはこちらです。
https://laravel-admin.org/docs/#/en/model-form-fields?id=multiple-select
githubのソースコードはこちら
https://github.com/z-song/laravel-admin/blob/master/src/Form/Field/MultipleSelect.php
継承の親のソース。optionsとかはこっち。
https://github.com/z-song/laravel-admin/blob/master/src/Form/Field/Select.php
あと、エンジニアの年収を上げる方法やフリーの営業法をツイートしてるんでフォローしてくださいっ!!
今はRubyの仕事をしてます。
働いてるのは週に2日だけですが、それでも年収は400万近くまでいきます。 プログラミングは安定して、そこそこの金額を稼げるいい仕事です 実務経験が5年くらいあれば誰でもできるので駆け出しエンジニアさんも夢があるんじゃないかと。 — ぱんだ@週2日エンジニア/フリーランス (@panda_program_) March 17, 2019
>> フォローは↓からですよ!
Follow @panda_program_