Php 在laravel中保存一对多关系时偏移量类型非法
我有一个Php 在laravel中保存一对多关系时偏移量类型非法,php,laravel,laravel-5.4,Php,Laravel,Laravel 5.4,我有一个包模型如下: class Package extends Model { protected $primaryKey = 'package_id'; protected $fillable = ['title', 'slug', 'desc']; public function options () { return $this->hasMany('App\Option', 'p
包
模型如下:
class Package extends Model
{
protected $primaryKey = 'package_id';
protected $fillable = ['title', 'slug', 'desc'];
public function options ()
{
return $this->hasMany('App\Option', 'package_id', 'package_id');
}
}
class Option extends Model
{
public $timestamps = false;
protected $primaryKey = ['option_id'];
protected $fillable = ['package_id','text'];
public function package ()
{
return $this->belongsTo('App\Package', 'package_id', 'package_id');
}
}
<input type="text" name="options[]" class="form-control">
还有一个选项
模型,如下所示:
class Package extends Model
{
protected $primaryKey = 'package_id';
protected $fillable = ['title', 'slug', 'desc'];
public function options ()
{
return $this->hasMany('App\Option', 'package_id', 'package_id');
}
}
class Option extends Model
{
public $timestamps = false;
protected $primaryKey = ['option_id'];
protected $fillable = ['package_id','text'];
public function package ()
{
return $this->belongsTo('App\Package', 'package_id', 'package_id');
}
}
<input type="text" name="options[]" class="form-control">
如您所见,它们之间存在一对多关系
现在我想为新创建的包保存一些新选项。为此,我编写了以下控制器方法:
public function store (StorePackageRequest $request)
{
$data = $request->except('options');
$package = Package::create($data);
$options = $request->get('options');
$opts = [];
foreach ($options as $key => $option) {
$opts[] = new Option(['text' => $option]);
}
$package->options()->saveMany($opts);
$result = ['success' => true, 'generated_id' => $package->package_id];
return $result;
}
options
来自$request->get('options')
的参数是如下所示的一些输入元素:
class Package extends Model
{
protected $primaryKey = 'package_id';
protected $fillable = ['title', 'slug', 'desc'];
public function options ()
{
return $this->hasMany('App\Option', 'package_id', 'package_id');
}
}
class Option extends Model
{
public $timestamps = false;
protected $primaryKey = ['option_id'];
protected $fillable = ['package_id','text'];
public function package ()
{
return $this->belongsTo('App\Package', 'package_id', 'package_id');
}
}
<input type="text" name="options[]" class="form-control">
问题是什么
更新:
完全错误:
[2017-08-07 16:49:50] local.ERROR: exception 'ErrorException' with message 'Illegal offset type' in D:\wamp\www\brands\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:818
Stack trace:
#0 D:\wamp\www\brands\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(818): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'Illegal offset ...', 'D:\\wamp\\www\\bra...', 818, Array)
#1 D:\wamp\www\brands\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(803): Illuminate\Database\Eloquent\Model->getCasts()
#2 D:\wamp\www\brands\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(832): Illuminate\Database\Eloquent\Model->hasCast('text', Array)
#3 D:\wamp\www\brands\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(565): Illuminate\Database\Eloquent\Model->isDateCastable('text')
#4 D:\wamp\www\brands\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php(525): Illuminate\Database\Eloquent\Model->isDateAttribute('text')
#5 D:\wamp\www\brands\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(223): Illuminate\Database\Eloquent\Model->setAttribute('text', 'a')
#6 D:\wamp\www\brands\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php(145): Illuminate\Database\Eloquent\Model->fill(Array)
读取后,get()
方法对于请求
不存在
阅读$request->get('options')
后,请尝试$request->input('options')
,而不是$request->get(
)方法,因为request
不存在
请尝试使用
$request->get('options')
,而不是$request->input('options')
,我可以想象您出现此问题的原因是因为您将$primarykey
设置为选项
模型中的数组
尝试将其更改为:
protected $primaryKey = 'option_id';
希望这有帮助 我想您出现此问题的原因是您在
选项
模型中将$primarykey
设置为数组
尝试将其更改为:
protected $primaryKey = 'option_id';
希望这有帮助 我尝试了你的代码,但没有解决,并得到相同的错误嗯好!在您的
选项
模型中,如果您将$primaryKey
从数组更改为字符串?我尝试了您的代码,但没有解决并得到相同的错误mmh ok!在您的选项
模型中,如果您将$primaryKey
从数组更改为字符串?