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

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

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

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

352閲覧

laravel5.8で親子関係があるテーブルにデータを保存したい

ttpk

総合スコア338

MySQL

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2022/03/10 14:03

編集2022/03/10 14:07

実現したいこと
usersテーブルに紐づいたdrillsテーブルと
drillsテーブルに紐づいたproblemsテーブルにデータを保存したい

テーブル構成は以下

PHP

1users 2 id - integer 3 name - string 4 5drills 6 id - integer 7 title - string 8 user_id - integer 9 10problems 11 id - integer 12 drill_id - integer 13 problem0 - string 14 problem1 - string 15 problem2 - string 16 problem3 - string 17 problem4 - string 18 problem5 - string 19 problem6 - string 20 problem7 - string 21 problem8 - string 22 problem9 - string

modelのコード

PHP

1 2namespace App; 3 4use Illuminate\Notifications\Notifiable; 5use Illuminate\Contracts\Auth\MustVerifyEmail; 6use Illuminate\Foundation\Auth\User as Authenticatable; 7 8class User extends Authenticatable 9{ 10 public function drills(){ 11 return $this->hasMany('App\Drill'); 12 } 13} 14

PHP

1 2namespace App; 3 4use Illuminate\Database\Eloquent\Model; 5 6class Drill extends Model 7{ 8 public function user(){ 9 return $this->belongsTo('App\User'); 10 } 11 12 Public function problems(){ 13 return $this->hasOne('App\Problem'); 14 } 15} 16

PHP

1 2namespace App; 3 4use Illuminate\Database\Eloquent\Model; 5 6class Problem extends Model 7{ 8 9 public function drill(){ 10 return $this->belongsTo('App\Drill'); 11 } 12} 13

drillRequestのコード(画面から入力されたデータの入力チェック用に作成)

PHP

1 2namespace App\Http\Requests; 3 4use Illuminate\Foundation\Http\FormRequest; 5 6class DrillRequest extends FormRequest 7{ 8 9 public function rules() 10 { 11 return [ 12 'title' => 'required|string|max:255', 13 'category_name' => 'required|string|max:255', 14 'problem0' => 'required|string|max:255', 15 'problem1' => 'nullable|string|max:255', 16 'problem2' => 'nullable|string|max:255', 17 'problem3' => 'nullable|string|max:255', 18 'problem4' => 'nullable|string|max:255', 19 'problem5' => 'nullable|string|max:255', 20 'problem6' => 'nullable|string|max:255', 21 'problem7' => 'nullable|string|max:255', 22 'problem8' => 'nullable|string|max:255', 23 'problem9' => 'nullable|string|max:255' 24 ]; 25 } 26} 27

controllerのコード

PHP

1namespace App\Http\Controllers; 2 3use Illuminate\Http\Request; 4use App\Drill; 5use App\Problem; 6use App\Category; 7use Illuminate\Support\Facades\Auth; 8use Illuminate\Database\Eloquent\Builder; 9use Illuminate\Support\Facades\DB; 10use App\Http\Requests\DrillRequest; 11 12class DrillsController extends Controller 13{ 14 public function create(DrillRequest $request){ 15 16 $drill = new Drill; 17 18 $problem = new Problem; 19 20 21 Auth::user()->drills()->save($drill->fill($request->all())); 22 $drill = Auth::user()->drills()->create(['name' => $request->input['title']]); 23 $drill->problems()->saveMany([ 24 new App\Problem(['problem0' => $request->problem0 ]), 25 new App\Problem(['problem1' => $request->problem1 ]), 26 以下problem9まで続く 27 ]); 28 }

$drillのデータの取得方法に間違いはないでしょうか?
problemsテーブルにsaveManyメソッドを使ってデータを保存しようとしていますが
方針に間違いはないでしょうか?

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

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

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

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

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

guest

回答1

0

自己解決

drillのmodelに該当ユーザの最新のdrillのデータを取得するメソッドを追加し、

php

1public function latestUserDrill() 2 { 3 $user_id = Auth::user()->id; 4 $drill = DB::table('drills')->where('user_id',$user_id)->orderBy('updated_at', 'desc')->first(); 5 return $drill; 6 }

一カラムずつ登録用のデータを作っていくように修正しました

php

1$drill = $drill->latestUserDrill(); 2 $problem->drill_id = $drill->id; 3 $problem->problem0 = $request->problem0; 4 $problem->problem1 = $request->problem1; 5 $problem->problem2 = $request->problem2; 6 $problem->problem3 = $request->problem3; 7 $problem->problem4 = $request->problem4; 8 $problem->problem5 = $request->problem5; 9 $problem->problem6 = $request->problem6; 10 $problem->problem7 = $request->problem7; 11 $problem->problem8 = $request->problem8; 12 $problem->problem9 = $request->problem9; 13 14 $problem->save();

投稿2022/03/18 14:18

ttpk

総合スコア338

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問