如何在Laravel中定义模型数据

时间:2017-08-14 06:38:50

标签: php mysql laravel-5

我需要根据使用project_id模型的相关项目将task保存到Project表中。

Project模型

public function scopeProject($query, $id)
{
    return $query->where('project_id', $id);
}

现在我将使用TaskController中的store方法保存到任务表,如下所示

public function store(Request $request, $id, Task $task)// this is line 45
{
    $task = new Task;
    $task->task_name   = $request->input('name');
    $task->body = $request->input('body');
    $task->assign          = $request->input('status');
    $task->priority        = $request->input('status');
    $task->duedate  = date("Y-m-d", strtotime($request->input("date")));// $request->input('date');
    $task->project_id        = $id;
    $task->save();
}

但是当我要在发生错误后保存这些数据时

  

TasksController.php第45行中的ErrorException:        传递给App \ Http \ Controllers \ TasksController :: store()的参数3必须是App \ Task的实例,没有给出

那么我怎样才能抓取project_id使用Project模型到我的TaskController

2 个答案:

答案 0 :(得分:0)

如果您不使用Laravel Route Model Binding,则需要将project_id作为查询字符串或隐藏输入传递

使用路线模型绑定的示例

定义您的路线,如下所示

Route::post('/projects/{project}/tasks', 'TaskController@store');

Project模型

中设置任务关系
public function tasks() {
    return $this->hasMany(\App\Task::class);
}

在您的控制器中

public function store(Request $request, Project $project)
{
    $task = new Task;
    $task->task_name   = $request->input('name');
    $task->body = $request->input('body');
    $task->assign = $request->input('status');
    $task->priority = $request->input('status');
    $task->duedate = \Carbon\Carbon::createFromFormat('Y-m-d', $request->input("date"));

    // This will set the project_id on task and save it
    $project->tasks()->save($task);
}

使用查询字符串或隐藏输入的示例

public function store(Request $request)
{
    $task = new Task;
    $task->task_name   = $request->input('name');
    $task->body = $request->input('body');
    $task->assign = $request->input('status');
    $task->priority = $request->input('status');
    $task->duedate = \Carbon\Carbon::createFromFormat('Y-m-d', $request->input("date"));

    // Find the project with the given id
    $project = Project::findOrFail($request->get('project_id'));

    // This will set the project_id on task and save it
    $project->tasks()->save($task);
}

答案 1 :(得分:0)

我得到了这样的结果..... TaskController

public function postNewTask(Request $request,$id, Project $project)
{

    $task = new Task;
    $task->task_name   = $request->input('name');
    $task->body = $request->input('body');
    $task->assign = $request->input('status');
    $task->priority = $request->input('status');
    $task->duedate  = date("Y-m-d", strtotime($request->input("date")));
    $task->project_id = $id;
    $task->save();

表单网址

<form  method="post" action="{{ route('projects.tasks.create', $project->id) }}">

和路线

Route::post('projects/{projects}/tasks', [
    'uses' => '\App\Http\Controllers\TasksController@postNewTask',
    'as' => 'projects.tasks.create'
]);