php - Laravel 5.8 - 无法使用 Laravel 添加或更新子行
问题描述
我有一个包含多个数据的简单表,如下所示:
页表
我创建了一个与这样命名的表的关系prebids
:
public function up()
{
Schema::create('prebids', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('bidder_name');
$table->string('params_name');
$table->string('params_value');
$table->bigInteger('page_id')->unsigned();
$table->foreign('page_id')->references('id')->on('pages')->onDelete('cascade');
$table->timestamps();
});
}
这是页面模型:
class Page extends Model
{
protected $fillable = [
"title",
"articles",
"status"
];
public function prebids() {
return $this->hasMany('App\Prebid');
}
}
这是预投标模型:
class Prebid extends Model
{
protected $fillable = [
"params_name",
"params_value",
"bidder_name"
];
public function page()
{
return $this->belongsTo('App\Page');
}
}
现在,当用户单击添加预投标时,我想根据模型存储预投标数据。
所以在pages index.blade.php
添加按钮上我有这个
<td>
<a href="{{ route('prebids.create'), $page->id}}"
class="btn btn-sm btn-primary">Add prebid</a>
我prebid controller
有以下内容:
class PrebidController extends Controller
{
public function create()
{
$prebid = Prebid::all();
$page = Page::all();
return view('prebids.create', ['page' => $page]);
}
public function store(Request $request)
{
foreach ($request->input() as $parameters) {
$parameters = new prebid();
$parameters->save();
}
return redirect("/pages")->with("sucess", "data successfully saved");
}
}
现在,当用户单击添加预出价时,它会打开一个表单,用户可以在其中添加信息并提交,当我提交时,我收到以下错误
SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(
royalad
。prebids
,CONSTRAINTprebids_page_id_foreign
FOREIGN KEY(page_id
)REFERENCESpages
(id
)ON DELETE CASCADE)(SQL:插入prebids
(updated_at
,created_at
)值(2019- 11-06 15:24:34, 2019-11-06 15:24:34))
我的代码有什么问题?
解决方案
在保存之前,您需要将页面与模型关联:
$parameters = new prebid();
$parameters->page()->associate( $theActualPageObject )
$parameters->save();
否则,表page_id
中的列prebid
将为空,这是不允许的,因为您设置了与pages.id
那里的关系 - 因此外键约束错误。
如果您不总是有一个页面,您还可以将其page_id
nullable
设置为并将其默认为null
$table->bigInteger('page_id')->unsigned()->nullable()->default(null);
推荐阅读
- excel - SharePoint 是否支持相互链接的 Excel 电子表格?
- reactjs - createBottomTabNavigator 中的 navigationOptions 的 propTypes 应该在哪里定义?
- ios - 如何从情节提要中的自定义视图制作@IBAction?
- c++ - 如何添加文件以在代码块中构建和读取它们?
- react-native - React Native 在视图上绘制自定义圆边
- react-hooks - 两行功能组件中的无效挂钩调用
- google-bigquery - 从时间戳中提取的 Bigquery 失败
- ruby-on-rails - 验证范围为属性值范围的唯一性
- java - 将请求从 1 个 jsp 文件解析到其他文件时收到 404 错误消息
- php - 在控制器 Laravel 中调用模型函数时如何将变量传递给模型?