Laravelでtodoリストを作っています。
メインタスクとそれに紐づくサブタスクを作っています。
編集機能を追加したときにエラーが発生しました。
MaintaskController.php <?php namespace App\Http\Controllers; use App\MainTask; use App\Task; use App\Http\Requests\CreateMainTask; use Illuminate\Http\Request; class MaintaskController extends Controller { public function index(int $id) { // 全てのメインタスクを取得する $maintasks = MainTask::all(); // 選ばれたメインタスクを取得する $current_maintask = MainTask::find($id); // 選ばれたメインタスクに紐づくサブタスクを取得する $tasks = $current_maintask->tasks()->get(); return view('maintasks/index', [ 'maintasks' => $maintasks, 'current_maintask_id' => $current_maintask->id, 'tasks' => $tasks, ]); } public function showCreateForm() { return view('maintasks/create'); } public function create(CreateMainTask $request) { $maintasks = MainTask::create([ 'title' => $request->title, // 'due_date' => $request->due_date, ]); return redirect()->route('maintasks.index', [ 'id' => $maintasks->id ]); } }
TaskController.php <?php namespace App\Http\Controllers; use App\MainTask; use App\Http\Requests\CreateTask; use App\Http\Requests\EditTask; use App\Task; use Illuminate\Http\Request; class TaskController extends Controller { public function showCreateForm(int $id) { return view ('tasks/create', [ 'maintask_id' => $id ]); } public function create(int $id, CreateTask $request) { $current_maintask = MainTask::find($id); // dd($current_maintask); $task = Task::create([ 'title' => $request->title, 'due_date' => $request->due_date, 'main_task_id' => $current_maintask->id ]); // $current_maintask->tasks()->create([ // 'title' => $request->title, // 'due_date' => $request->due_date // ]); // $task = new Task(); // $task->title = $request->title; // $task->due_date = $request->due_date; // $current_maintask->tasks()->save($task); return redirect()->route('maintasks.index', [ 'id' => $current_maintask->id ]); } public function showEditForm(int $id, int $task_id) { $task = Task::find($task_id); return view('tasks/edit', [ 'task' => $task, ]); } public function edit(int $id, int $task_id, EditTask $request) { $task = Task::find($task_id); $task->title = $request->title; $task->status = $request->status; $task->due_date = $request->due_date; $task->save(); return redirect()->route('maintasks.index', [ 'id' => $task->id, ]); } // public function delete(int $id, $task_id, Request $request) // { // $task = Task::find($task_id); // return view('tasks/delete', [ // 'task' => $task // ]); // } // public function remove(int $id,int $task_id, Request $request) // { // $task = Task::find($task_id); // $task = delete(); // return redirect()->route('maintasks.index', [ // 'id' => $task->id // ]); // } }
モデルが
Task.php <?php namespace App; use Illuminate\Database\Eloquent\Model; class Task extends Model { protected $fillable = ['main_task_id','title', 'due_date']; protected $table = "tasks"; public function maintasks() { return $this->belongsTo('App\MainTask'); } // protected $attributes = [ // "main_task_id" => "(default value)", // ]; /** * 状態定義 */ const STATUS = [ 1 => ['label' => '未着手'], 2 => ['label' => '着手中'], 3 => ['label' => '完了'], ]; /** * 状態のラベル * @return string */ public function getStatusLabelAttribute() { // 状態値 $status = $this->attributes['status']; // 定義されていなければ空文字を返す if (!isset(self::STATUS[$status])) { return ''; } return self::STATUS[$status]['label']; } }
MainTask.php <?php namespace App; use Illuminate\Database\Eloquent\Model; class MainTask extends Model { protected $fillable = ['title']; protected $table = "main_tasks"; public function tasks() { return $this->hasMany('App\Task', 'main_task_id'); } }
編集画面で編集はできるのですが、タイトルに書いているように、エラーが発生してしまいます。
コードで指摘されているところが
// 選ばれたメインタスクに紐づくサブタスクを取得する $tasks = $current_maintask->tasks()->get();
ここになります。
値がnullになっていて、何も入っていないというエラーだと思うんですが、でもタイトルや日付などを変更して更新したらエラーはでるが、データベースをみてみると更新できているのでよくわからなくなってしまいました。
ご回答の方をよろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー