如何在db中存储模型之间的关系? - Laravel

问题描述:

我有一个员工表和一个角色表。在创建员工的过程中,我也希望分配一个角色。但是,我的代码将雇员表中的外键的数据存储为NULL。我如何让它存储关系?如何在db中存储模型之间的关系? - Laravel

员工model.php

class employees extends Model 
{ 
    protected $fillable = [ 
    'first_name', 
    'surname', 
    ]; 

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

角色model.php

class Roles extends Model 
{ 
    protected $fillable = [ 
    'role_name', 
    ]; 

    public function Employees() 
    { 
    return $this->hasMany('App\Employees'); 
    } 
}` 

控制器创建员工

public function store(EmployeesRequest $request) 
{ 
    $employee = Employees::find($request); 
    Employees::create($request->all()); 
    Roles::create($request->all()); 
    $employee->roles()->save($roles); 
    return redirect()->route('employees.index')->with('message','Employee has been added'); 

} 

在我FIRST_NAME,姓氏和ROLE_NAME形式。这些被保存,但在雇员表中的role_id列为NULL?试图读取laravel文档,但奋力使用 - >保存方法

它返回当前的错误是对空调用一个成员函数的角色()

你必须让ROLE_ID可填写您的员工型号:

protected $fillable = [ 
    'role_id', 
    'first_name', 
    'surname', 
    ]; 

在你的控制器中: 你需要使用App \ Roles;

public function create() 
    { 
     $role = Role::lists('role_name', 'id'); 
     return view('roles.create', compact('role')); 

    } 

public function store(EmployeesRequest $request) 
    { 
     Employees::create($request->all()); 
     return redirect()->route('employees.index')->with('message','Employee has been added'); 
    } 

形式:

<div class="form-group"> 
      {!! Form::label('role_id', 'Role:') !!} 
      {!! Form::select('role_id', $role, null, ['class' => 'form-control']) !!} 
     </div> 

HTML表格: 尝试这样的事情,我希望它的作品其没有测试

<label>Role</label> 
<select name="role_id"> 
    @foreach($roles as $role) 
    <option value="{{ $role->id }}">{{ $role->role_name }}</option> 
    @endforeach 
</select 

在你的控制器:

public function create() 
    { 
     $roles = Role::all();  
     return view('roles.create', compact('roles')); 

    } 
+0

我已添加'roles_ id“作为员工模型中可填写的。 雇员的数据传递给数据库,但角色不再传递,这就是为什么我有'角色::创建($ request-> all());' 当我这样做'role_id'不填充以显示关系。 在控制器中是否有一个我应该包含的语法使其与role_id关联? 目前我在这里,但仍然没有运气: $ employee = new Employees(); \t \t Employees :: create($ request-> all()); \t \t \t \t角色:: create($ request-> all()); \t \t $ roles = $ employee-> roles() - > associate($ employee); \t \t return redirect() - > –

+0

雇员表中是否有外键role_id字段? Employeesrequest中是否有role_id? –

+0

是员工表有'roles_id',没有EmpoyeesRequest。我刚刚测试过它并且roles_id列仍为NULL –