【发布时间】:2017-05-17 08:45:23
【问题描述】:
我正在构建一个 API,我在使用 postman 测试我的 api 从表中更新和删除时遇到以下错误
//update error
QueryException in Connection.php line 770:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'title' cannot be null (SQL: update `lessons` set `title` = , `body` = , `completed` = , `updated_at` = 2017-01-03 09:14:10 where `id` = 11)
//delete error
FatalErrorException in LessonsController.php line 80:
Call to a member function delete() on null
我的控制器课程控制器
<?php
namespace App\Http\Controllers;
use Response;
use App\lesson;
use Illuminate\Http\Request;
use App\Acme\Transformers\LessonTransformer;
use Illuminate\Support\Facades\Input;
class LessonsController extends ApiController {
protected $lessonTransformer;
function __construct(LessonTransformer $lessonTransformer) {
$this->lessonTransformer = $lessonTransformer;
}
//fetch all and pass a metadata 'data'
public function index() {
$lessons = Lesson::all();
return $this->respond([
'data' => $this->lessonTransformer->transformCollection($lessons->all())
]);
}
//fetch by id
public function show($id) {
$lesson = Lesson::find($id);
if(! $lesson) {
return $this->respondNotFound();
}
return $this->respond([
'data' => $this->lessonTransformer->transform($lesson)
]);
}
public function store() {
if (! input::get('title') or ! input::get('body')) {
return $this->respondBadRequest();
}
Lesson::create(input::all());
return $this->respondCreated();
}
public function update(Request $request, $id) {
$ulesson = Lesson::find($id);
$ulesson->title = $request->input('title');
$ulesson->body = $request->input('body');
$ulesson->completed = $request->input('completed');
$ulesson->save();
return "Sucess updating user #" . $ulesson->id;
}
public function destroy(Request $request) {
$dlesson = Lesson::find($request->input('id'));
$dlesson->delete();
return "Employee record successfully deleted #" . $request->input('id');
}
}
我的模型课
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Lesson extends Model
{
protected $fillable = ['title', 'body', 'completed',];
//protected $hidden =['title'];
}
商店和其他功能运行良好
谢谢
【问题讨论】:
-
您的
$ulesson->title似乎没有在您的更新函数中设置,并且可能需要所有这些值来执行您的更新请求 -
您可能还想查看
$ulesson->fill($request->all());:) -
我很抱歉,我没有得到我应该做什么
-
似乎在销毁函数中 $dlesson = Lesson::find($request->input('id'));找不到要删除的内容。你可以检查 if($dlesson) 然后 $dlesson->delete();
-
查看Laravel form request validation。我发现这是验证的最干净的解决方案之一。您可以请求验证检查是否设置了所有必填字段,这样如果验证未通过,控制器将永远不会执行。
标签: php laravel rest api laravel-5.3