SQLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行:外键约束失败 laravel 5.2

问题描述 投票:0回答:1

我正在尝试将数据插入到有 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()!!}

如果有人能告诉我我做错了什么,我将不胜感激。 如果我忘记包含任何内容,请告诉我,我会将其添加到问题中。

mysql laravel-5
1个回答
0
投票

首先,我真的建议更改很多内容 - 但首先要了解一下该状态。

尝试死掉并转储您尝试从请求中提取的数据。确保您确实拥有所需的所有数据。我的第一感觉告诉我这里缺少了一些东西。

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 是有效值,否则将会失败。

© www.soinside.com 2019 - 2024. All rights reserved.