当我在 Laravel 上创建新行时出现非法偏移类型
Posted
技术标签:
【中文标题】当我在 Laravel 上创建新行时出现非法偏移类型【英文标题】:Illegal offset type when i create a new row on Laravel 【发布时间】:2021-06-02 07:39:22 【问题描述】:我们创建了三个表,分别称为“users”、“corso”,“iscrizione”是用户和 corso 之间的中间表,它具有 PK/FK 两个属性。我们成功构建了创建/更新方法/read/delete 'corso' 中的行,我们手动填充了 'users'。 我们正在尝试实现 iscrizione 的 create 方法,但是当我们尝试使用 Postman 执行它时会生成以下错误:
ErrorException: Illegal offset type in file I:\Test db Laravel\testdb\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php on line 1146
???? Illegal offset type
这些是数据库中每个表的类模型:
Iscrizione 模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Iscrizione extends Model
use HasFactory;
protected $hidden = ['idCorso', 'idUtente'];
protected $primaryKey = ['idCorso', 'idUtente'];
protected $table = 'iscrizione';
Corso 模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Corso extends Model
use HasFactory;
protected $primaryKey = 'idCorso';
protected $table = 'corso';
protected $fillable = ['tipo','nome', 'membriMax', 'inizio', 'fine'];
最后一个是我们ApiController类上的创建方法:
public function iscrizione(Request $request)
$iscrizione = new Iscrizione();
$iscrizione->idCorso = $request->input('idCorso');
$iscrizione->idUtente = $request->input('idUtente');
$iscrizione->save();
return response()->json($iscrizione);
【问题讨论】:
【参考方案1】:您需要覆盖 setKeysForSaveQuery 以使用您为 Iscrizione 模型定义的复合键:
Iscrizione.php
protected function setKeysForSaveQuery(Builder $query)
return $query->where('idCorso', $this->getAttribute('idCorso'))
->where('idUtente', $this->getAttribute('idUtente'));
并删除以下行
protected $primaryKey = ['idCorso', 'idUtente'];
【讨论】:
在添加到 Iscrizione.php 模型时出现此错误:Method setKeysForSaveQuery is not compatible with Illuminate\Database\Eloquent\Model::setKeysForSaveQuery()
。
你是用use语句导入Builder的吗?
是的,我们做到了。我们导入了use Illuminate\Database\Query\Builder;
那么可能是一些函数签名不匹配的问题。您正在开发哪个版本?
我们正在开发 Laravel 框架 8.30.1以上是关于当我在 Laravel 上创建新行时出现非法偏移类型的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试在 laravel 中更新数据透视表的内容时,有啥方法可以解决非法偏移类型错误
Laravel'非法字符串偏移'leave_form'问题与数组