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

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

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

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

PHP

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

Q&A

解決済

1回答

4506閲覧

Call to a member function tasks() on null のエラー

m2B

総合スコア20

Laravel

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

PHP

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

0グッド

0クリップ

投稿2019/11/20 09:52

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になっていて、何も入っていないというエラーだと思うんですが、でもタイトルや日付などを変更して更新したらエラーはでるが、データベースをみてみると更新できているのでよくわからなくなってしまいました。
ご回答の方をよろしくおねがいします。

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

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

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

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

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

meshi_s

2019/11/20 11:15

$current_maintask = MainTask::find($id); でデータを取得できていますか?
guest

回答1

0

ベストアンサー

エラーに書いてあるんだから、$current_maintaskがnullなんでは。
まずはこの値をチェックしてみては

投稿2019/11/20 11:35

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問