Laravel实现PackageItem表CRUD及外键关联Item的报错问题求助
问题排查及修复方案
1. Array to string conversion报错修复
你调用Item::arrayPackageItemSelect()返回的是[ItemID => Item名称]格式的关联数组,PHP的echo语句仅支持输出字符串类型,直接输出数组就会触发该报错。如果需要调试查看数组内容,可使用dd($item)、var_dump($item)或者return response()->json($item)输出。
2. 新增PackageItem逻辑错误修复
你将整个Item映射数组直接赋值给了item_id外键字段,该字段仅需要传入单个Item的ID值,你已经在验证规则中要求前端传入item_id,直接取验证后的参数即可,修改创建逻辑如下:
$package = PackageItem::create([ 'user_id' => $user->id, 'item_id' => $fields['item_id'], // 替换原来的$item变量 'price'=> $fields['price'] ]);
注:arrayPackageItemSelect()方法的适用场景是给前端渲染下拉选择框,新增数据的接口不需要调用该方法,可以直接删除。
3. 模型关联定义错误修复
PackageItem模型中的关联方法不能加static关键字,静态方法中不存在当前模型实例的$this对象,会直接调用报错,修改如下:
// 去掉static关键字,方法名建议更语义化 public function item() { return $this->belongsTo(Item::class, 'item_id'); }
后续需要查询PackageItem关联的Item数据时,直接调用PackageItem::with('item')->get()即可获取关联数据。
4. 验证规则优化
你已经通过Auth::user()获取当前登录用户ID作为user_id写入,不需要在验证规则中要求前端传入user_id,可以把验证规则里的'user_id' => 'required'项删除,避免前端未传参数时验证失败。
内容的提问来源于stack exchange,提问作者Grizzly Bear
相关产品推荐
相关产品推荐

