我正在尝试将数据插入到有 2 个外键的股票表中,但出现此错误,而且我不知道我做错了什么。
这是我的库存模型。
//voorraad = stock
// Model Voorraad has the attributes, Aantal and Id;
// foreign keys are Producten_Id and Locaties_Id from the table Producten and locaties table
class Voorraad extends Model
{
public $fillable = ['Id', 'aantal', 'Producten_Id', 'Locaties_Id'];
protected $table = 'Voorraad';
public $timestamps = false;
public function producten()
{
return $this->BelongsTo('App\Producten', 'Producten_Id');
}
public function locatie()
{
return $this->BelongsTo('App\Locatie', 'Locaties_Id');
}
}
这些是我用来创建数据并将数据存储到数据库中的控制器函数。
public function create()
{
//retuning the view with database tables producten and locaties passing through to the create view the Id
return view('voorraad.create',[
'producten' => Producten::all('Id'),
'locaties' => Locatie::all('Id')
]);
}
public function store(Request $request)
{
//Producten_Id is the foreign key from the table producten
//Locaties_Id is the foreign key form the table Locaties
//aantal is the ammout of a sertain product
Voorraad::create($request->only(['aantal', 'Producten_Id', 'Locaties_Id']));
return redirect(Route('voorraad.index'));
}
这是创建视图
{!! Form::open(['url'=>'voorraad']) !!}
{!! Form::label('aantal', 'aantal:') !!}
{!! Form::text('aantal')!!} </br>
<div class="form-group">
{{ Form::label('producten_id', 'Producten_Id:') }}
{{ Form::Select('Producten_Id' , $producten, null) }}</br>
</div>
<div class="form-group">
{{ Form::label('Locatie_Id', 'Id:') }}
{{ Form::select('Locaties_Id', $locaties, null) }}
</div>
<div>
{!! Form::Submit('create', ['class' => 'btn btn-primary form-control']) !!}
</div>
</div>
{!!形式::close()!!}
如果有人能告诉我我做错了什么,我将不胜感激。 如果我忘记包含任何内容,请告诉我,我会将其添加到问题中。
首先,我真的建议更改很多内容 - 但首先要了解一下该状态。
尝试死掉并转储您尝试从请求中提取的数据。确保您确实拥有所需的所有数据。我的第一感觉告诉我这里缺少了一些东西。
public function store(Request $request)
{
dd($request->only(['aantal', 'Producten_Id', 'Locaties_Id']));
...
}
即使您可以设法用此方法修复它,我强烈建议您对代码进行重大更改。
public $fillable = ['Id', 'aantal', 'Producten_Id', 'Locaties_Id'];
永远不要让 Id 可填写。用户可以根据需要更改 Id 或设置 Id。通常您会对外键执行相同的操作。您可以按照 laravel 文档中提到的方式将它们关联起来。 https://laravel.com/docs/5.2/eloquent-relationships
$user->account()->associate($account);
不要让 id 可以批量分配!
进行这些更改时,您可能还会轻松解决外键问题。
只是一个简单的例子
$p = Producten::findOrFail($request->input('Producten_Id'));
$l = Locatie::findOrFail($request->input('Locaties_Id'));
$v = new Voorraad();
$v->aantal = $request->input('aantal');
$v->locatie()->associate($l);
$v->producten()->associate($p);
$v->save();
这样您将确保 $p 和 $l 是有效值,否则将会失败。