Laravel - 功能参数太少(插入数据)

时间:2018-06-17 16:40:39

标签: php laravel

我真的需要帮助,因为我无法弄清楚问题是什么,并且浏览过的答案都没有成功。

我需要从视图中插入有关员工的数据,这应该非常简单。所以我有两张桌子 - ''部门''和''员工'。当我打开视图'''''''它显示了每个部门,我可以进一步选择其中一个部门,并查看在该部门工作的所有员工,我可以删除员工。一切都在这一点上起作用。但是,当我想添加员工时,它会显示错误 - 参数太少(...)。

路线

Route::get('department/', 'DepartmentController@index');

Route::get('department/delete/{id}','DepartmentController@destroy');

Route::get('employee/new/{id}', 'EmployeeController@new');

Route::get('employee/insert/{id}', 'EmployeeController@store');

Route::get('employee/{id}', 'EmployeeController@index');

EmployeeController

namespace App\Http\Controllers;


use App\Employee;
use App\Department;
use Illuminate\Http\Request;


class EmployeeController extends Controller
  {
    public function index($department_id){
       $employees=Employee::where('department_id','=',$department_id)->get();
       return view('employees' ['department_id'=>$department_id,'employees'=>$employees]);
  }

    public function new ($department_id){
       $departments=Department::where('department_id','=',$department_id)->get();       
       return view('employee_new',['department_id'=>$department_id,'department_name'=>$departments[0]->department_name]);
  }
    public function store( $id, $name, $surname, $email, $phone){
     $employee = new Employee;

     $employee->employee_name = $name;
     $employee->employee_surname = $surname;
     $employee->employee_email = $email;
     $employee->employee_phone = $phone;
     $employee->department_id = $id;

     $employee->save();
  }

员工模型

namespace App;

use Illuminate\Database\Eloquent\Model;

class Employee extends Model{

protected $table = 'employees';

   public function department() {
    return $this->belongsTo('App\Department');
 }
}

employee_new.blade(查看)

Adding a new employee for <b>{{ $department_name }}</b> department:
<table>
<tr>
    <td>Employee Name<td>
    <td>:</td>
    <td><input type="text" id="employee_name"></td>

    <td>Employee Surname<td>
    <td>:</td>
    <td><input type="text" id="employee_surname"></td>

    <td>Employee Email<td>
    <td>:</td>
    <td><input type="text" id="employee_email"></td>

    <td>Employee Phone number<td>
    <td>:</td>
    <td><input type="text" id="employee_phone"></td>


    <td><input type="button" value="add" onclick="addEmployee()"></td>

</tr>

</table>
<script>
    function addEmployee() {    
        window.location.href="/employee/insert/"+{{$department_id}};          
    }
</script>

错误行

 Symfony \ Component \ Debug \ Exception \
 FatalThrowableError (E_RECOVERABLE_ERROR)
 Too few arguments to function 
 App\Http\Controllers\EmployeeController::store(), 1 passed and exactly 5 expected

2 个答案:

答案 0 :(得分:1)

您的代码有多个问题,我会逐一指出它们:

  1. 您没有带有操作的表单标记
  2. 您正在使用1个参数调用该函数(在javascript中)但是 它预计有5个参数($ id,$ name,$ surname,$ email,$ phone)
  3. 在数据库中插入内容的路径需要不发布 获得
  4. 将数据作为get传递给数据库时必须小心 参数,因为它是非常不安全的
  5. 我将为您提供一个简单的示例,以便您可以抓住本质

    您的观点(假设名为new-user.blade.php):

    <form method="post" action="{{ route('saveData') }}">
    <input type="text" name="name" />
    <button type="submit">Save</button>
    </form>
    

    您的控制器(使用saveData方法) - 假设您的控制器名为UserController

    加载添加新用户表单方法:

    public function userForm()
    {
    return view('new-user');
    }
    

    将数据保存到数据库:

    public function saveData(Request $request)
    {
    $user = new User;
    $user->name = $request->name;
    $user->save();
    
    // or User::create($request->all());
    
    return view('view-name')->with('status', 'User was saved!');
    }
    

    您的路线(在web.php档案中)

    Route::get('/new-user', 'UserController@userForm'); //加载表单

    Route::post('/create-user', 'UserController@saveData')->name('saveData'); //将数据保存到数据库

答案 1 :(得分:0)

问题与方法参数有关。

public function store(Request $request, $id){
     $employee = new Employee;
     $employee->employee_name = $request->employee_name;
     $employee->employee_surname = $request->employee_surname;
     $employee->employee_email = $request->employee_email;
     $employee->employee_phone = $request->employee_phone;
     $employee->department_id = $id;
     $employee->save();
}

输入标签也没有名称属性。