laravel 多对可能的关系

laravel many to may relationship

我有两本 table 护照和状态以及一个数据透视表 table passport_statuses.I 已从下拉列表中输入护照详细信息和 select 状态,但我无法保存数据在 pivot table.please help.My 代码如下:

护照模型

class Passport extends Model
{
protected $fillable=[
'Full_Name',
'Date_of_Birth',
'Passport_Number',
'comments',
'Delivered_to_owner'
];
public function status()
{
return $this->belongsToMany('App\Statuses',"passport_statuses","passport_id","statuses_id")->withTimestamps();
    }
}

状态模型

class Statuses extends Model
{
 protected $fillable=[
'Status_Name'
];
public function passport()
{
return $this->belongsToMany('App\Passport',"passport_statuses","passport_id","statuses_id")->withTimestamps();
}
}

护照控制器

public function create()
{
        $statuses=Statuses::lists('Status_Name','id');
    return view('admin.passport.create')->with('statuses',$statuses);
}
 public function store(Request $request)
{
$passport=Passport::create($request->all());
$passport->status()->attach($request->input('statuses'));
  return redirect('admin/passport');
}

查看

{!!Form::open(['url'=>'admin/passport'])!!}
<div class="form-goup">
{!!Form::label('Full_Name','Full Name')!!}
{!!Form::text('Full_Name',null,['class'=>'form-control'])!!}
</div>
<div class="form-goup">
{!!Form::label('Date_of_Birth','Date of Birth')!!}
{!! Form::input('date', 'Date_of_Birth', null, ['class' => 'form-control', 'placeholder' => 'Date']) !!}
</div>
{!!Form::label('Passport_Number','Passport Number')!!}
{!!Form::text('Passport_Number',null,['class'=>'form-control'])!!}
<div class="form-goup">
{!!Form::label('Status_Name','Status')!!}
{!!Form::select('Status_Name',$statuses,null,['class'=>'form-control'])!!}
</div>

<div class="form-group">
 {!!Form::submit('Add',['class'=>'btn btn-primary'])!!}

</div>
{!!Form::close()!!}

您的 Passport 型号没有 belongToMany 状态,但是 hasManyThrough 状态。

也许你的问题就在这里。

我认为你模型中的线 Passport.php 应该是这样的 :

public function status()
{
return $this->hasManyThrough('App\Statuses',"passport_statuses","passport_id","statuses_id")->withTimestamps();
}

检查 laravel.com

上的 BelongToMany 和 HasMany 文档
class Passport extends Model
{
protected $fillable=[
'Full_Name',
'Date_of_Birth',
'Passport_Number',
'comments',
'Delivered_to_owner'
];
public function status()
{
return $this->belongsToMany('App\Statuses',"passport_statuses","passport_id","statuses_id")->withTimestamps();
    }
}


class Statuses extends Model
{
 protected $fillable=[
'Status_Name'
];
public function passport()
{
return $this->belongsToMany('App\Passport',"passport_statuses","statuses_id", "passport_id")->withTimestamps();
}
}

belongsToMany 关系采用当前模型的第三个参数外键 table 和相关模型的第四个参数外键 table

当然你的 table 必须像这样 passport_statuses 至少有两列 statuses_id 和 passport_id.And 在你的例子中 created_at 和updated_at 时间戳列

我能够通过在 PassportController

中将输入('statuses')更改为输入('Status_Name')来解决这个问题
$passport->status()->attach($request->input('Status_Name'));