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

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

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

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

Laravel

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

Q&A

解決済

1回答

1075閲覧

[laravel]ラジオボタンを押下時に作業中カテゴリー・完了カテゴリーごとに表示をさせたい

twinparadox

総合スコア42

MySQL

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

Laravel

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

0グッド

0クリップ

投稿2020/02/01 22:26

編集2020/02/01 22:28

#実現したい事
下記イメージのように「すべて」「作業中」「完了」ボタンを押下時にGETもしくはPOST送信を行いカテゴリー別にタスクを表示させたい。
イメージ
#やったこと
・ラジオボタン×3に対して3つのformを用意した。
・「すべて」に関してはGETでリダイレクトするのみの記述をした(動作済み)
・「作業中」ボタンに関しては押下時にPOST送信→新たなルーティングを追加してコントローラー側でdoneカラムが1のレコードのみを引っ張ってきてリダイレクトさせるようにした。(done()にて0:1の値を返しているのでそれを使用しようと考えた)
#困っていること
select_workingにURLは飛んでいるが

Call to a member function delete() on null

のエラーが出て今まで動いていたdelete()が無い事になっている。。。

何が必要なのでしょうか?

以下ソースコード

views/layouts/index.blade.php

<html> <head> <title>@yield('title')</title> <style> body { text-align: center; font-size: 16pt; color: #999; margin: 5px; } ul { font-size: 12pt; } hr { margin: 25px 100px; border-top: 1px dashed #ddd; } .menutitle { font-size: 25pt; font-weight: bold; margin: 0px; } .content { margin: 10px; } .footer { font-size: 20pt; margin: 10px; } th { background-color: #999; color: fff; padding: 5px 10px; } td { border: solid 1px #aaa; color: #999; padding: 5px 10px; } .text { display: none; } .text01 { display: block; } </style> </head> <body> <h1 class="menutitle"> Todoリスト3</h1> <div style="display:inline-flex" style="margin:0px;"> <form method=" GET" action="{{ url('Todo') }}" name="form1" style="margin:0px;"> @csrf <input type="radio" ... onclick="document.form1.submit();">すべて </form> <form method="POST" action="{{ url('Todo/select_working') }}" name="form2" style="margin:0px;"> @csrf <input type="radio" ... onclick="document.form2.submit();">作業中 </form> <form method="POST" action="{{ url('Todo') }}" name="form3" style="margin:0px;"> @csrf <input type="radio" ... onclick="document.form3.submit();">完了 </form> </div> <h2 style="margin:0px;">TASKを追加</h2> @if (count($errors) > 0) <ul> @foreach ($errors->all() as $error) {{ $error }} @endforeach </ul> @endif <form action="/Todo" method="post" style="margin:0px;"> @csrf <input type="text" name="comment" size="70" value="{{old('comment')}}"> <input type="submit" value="追加"> </form> <hr size="1"> <div class="content"> @yield('content') </div> <div class="footer"> @yield('footer') </div> <script> $(function() { $('[name="btn"]:radio').change(function() { if ($('[id=a]').prop('checked')) { $('.text').fadeOut(); $('.text01').fadeIn(); } else if ($('[id=b]').prop('checked')) { $('.text').fadeOut(); $('.text02').fadeIn(); } }); }); </script> </body> </html>

views/Todos/index.blade.php

@extends('layouts.index') @section('title','Todoリスト') @section('content') <table align="center"> <tr> <th>ID</th> <th>comment</th> <th>状態</th> </tr> @foreach ($items as $item) <tr> <td>{{$loop->iteration}}</td> <td>{{$item->comment}}</td> <td> <form action="{{ url('done/' . $item->id) }}" method="POST"> @csrf <button type="submit"> @if ($item->done === 0) <p>作業中</p> @else <p>完了</p> @endif </button> </form> </td> <td> <form action="{{ url('Todo/' . $item->id) }}" method="POST"> @csrf <button type="submit"> <p>削除</p> </button> </form> </td> </tr> @endforeach </table> @endsection

web.php

<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::get('/Todo', 'TodoController@index'); Route::post('/Todo', 'TodoController@create'); Route::group(['middleware' => ['web']], function () { Route::post('/Todo', 'TodoController@create'); }); Route::post('/Todo/{table}', 'TodoController@delete'); Route::post('/done/{id}/', 'TodoController@done'); Route::post('/Todo/select_working/', 'TodoController@select_working');

TodoController.php

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests\CreateTaskRequest; use Illuminate\Support\Facades\DB; use App\Todo; class TodoController extends Controller { public function index(Request $request) { $items = Todo::all(); return view('Todos.index', ['items' => $items]); } public function create(CreateTaskRequest $request) { $todo = new Todo; $form = $request->all(); unset($form['_token']); $todo->timestamps = false; $todo->fill($form)->save(); return redirect('/Todo'); } public function delete(Request $request) { Todo::find($request->table)->delete(); $items = Todo::all(); $items = DB::table('Todos')->orderBy('todo_id', 'asc')->get(); return redirect('/Todo'); } public function done($id) { $todo = Todo::find($id); $todo->done = ($todo->done) ? 0 : 1; $todo->save(); return redirect('/Todo'); } public function select_working(Request $request) { $working = Todo::where('done', 1)->get(); return redirect('/Todo'); } }

Todo.php

<?php namespace App; use Illuminate\Database\Eloquent\Model; class Todo extends Model { protected $table = 'Todos'; protected $fillable = ['id', 'comment', 'todo_id', 'done']; public static $rules = array( 'comment' => 'required' ); }

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

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

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

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

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

m.ts10806

2020/02/01 22:49

「MySQL」は今回全く関係ないのでは
guest

回答1

0

ベストアンサー

単にTodo::find($request->table)の結果がnullになっているとかでは(もしくは$request->table)。
チェーンで一気につなげるとどこまで動作しているか分からなくなるので
1つ1つdd()で結果を確かめていってはいかがでしょうか

ただ、そもそもルーティングで'/Todo/{table}'と書いたのでしたら、
受け先のメソッドで同名の変数で受け取ると思うのですけど(ルーティング#ルートパラメーターなど参照)、done()と実装を変えているのは何故ですか?

投稿2020/02/01 22:48

編集2020/02/01 22:52
m.ts10806

総合スコア80850

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

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

twinparadox

2020/06/14 04:21

今自分の書いたものをコードも含めて読み返してみたのですが 結果からいうとよく分かりませんでした。 問題を解決出来たのは間違いないので、後回しにせず解決した時に 返信しておくべきでした。 ここからはおそらくの回答になってしまうのですが m.ts 10806さんの言われるようにdd()でデバッグして中身を確認して進めたのだと思います。 そして想定していた中身が渡されていなかったので濃厚かと思います。 せっかく回答してもらったのに曖昧な返答になってしまいすみません。。。 次回からはないようにします。 ありがとうございました。
m.ts10806

2020/06/14 05:02

いえ、しばらく放置されて急に解決とされたので。 質問をしたからには解決まで対応するのが質問者の責任と思いますので、そこはきちんと見るようにしてください。 「なぜかわからないけど解決した」状態が自身にも良くありません。
twinparadox

2020/06/14 18:31

アドバイスありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問