前提・実現したいこと
Laravelで簡単なAPIを実装しています。
具体的には、GET,POST,PUT,DELETEのAPIです。
ですが、GET,DELETEはうまくいくのですが、POST,PUTの際にエラーが発生します。
また、POSTはデータだけは一応入ります。
どなたか解決方法のご教授お願い致します。
発生している問題・エラーメッセージ
POST
1// curl -XPOST localhost:8000/api/tasks -d 'name=Learn Vue.js' 2 3[2019-08-30 08:06:35] local.ERROR: Call to a member function fresh() on boolean {"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code: 0): Call to a member function fresh() on boolean at /var/www/html/jwt/app/Http/Controllers/TaskController.php:21) 4[stacktrace] 5#0 [internal function]: App\Http\Controllers\TaskController->store(Object(Illuminate\Http\Request))
PUT
1// curl -XPUT localhost:8000/api/tasks/5 -d 'is_done=true' 2 3[2019-08-30 08:05:03] local.ERROR: Call to a member function fresh() on boolean {"exception":"[object] (Symfony\Component\Debug\Exception\FatalThrowableError(code: 0): Call to a member function fresh() on boolean at /var/www/html/jwt/app/Http/Controllers/TaskController.php:38) 4[stacktrace] 5#0 [internal function]: App\Http\Controllers\TaskController->update('5', Object(Illuminate\Http\Request))
該当のソースコード
route
1Route::group(['middleware' => 'api'], function () { 2 Route::resource('tasks', 'TaskController'); 3}); 4
Model
1<?php 2 3namespace App; 4 5use Illuminate\Database\Eloquent\Model; 6 7class Task extends Model 8{ 9 protected $fillable = ['name', 'is_done']; 10 protected $casts = [ 11 'is_done' => 'boolean', 12 ]; 13} 14
Controller
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Task; 7 8class TaskController extends Controller 9{ 10 // GET 11 public function index() 12 { 13 return Task::take(5)->get()->keyBy('id'); 14 } 15 16 // POST 17 public function store(Request $request) 18 { 19 return Task::create($request->only('name'))->save()->fresh(); 20 } 21 22 // DELETE 23 public function destroy($id) 24 { 25 return Task::destroy($id); 26 } 27 28 // PUT 29 public function update($id, Request $request) 30 { 31 return Task::find($id)->fill($request->only('is_done')) 32 ->save()->fresh(); 33 } 34} 35
試したこと
storeでrerurn $request
updateでreturn $id
補足情報(FW/ツールのバージョンなど)
Laravel 5.8.33
$requestがきちんと渡ってきているかとか$idのようなパラメータが渡ってきているかどうかとかは確認されました?
エラー内容からbool型になっているようなので、きちんと渡ってきていないように見えます。
ご回答ありがとうございます!
メソッドの中で$requestと$idを返すようにして、確認したのですが一応渡っている?ようです。
その内容を「試したこと」に追記致しました!
saveの戻り値を調べてみたところ、成否値が返ってきていたため、
$task = Task::create($request->only('name'))->save();
if ($task === true) {
$freshTask = new Task();
return $freshTask->fresh();
}
... としたところ無事解決致しました。
ありがとうございました!!!
回答1件
あなたの回答
tips
プレビュー