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
从数组更改为字符串?