eloquent 可以忽略 Laravel 5.7 中不相关的数据吗

Can eloquent ignore irrelevant data in Laravel 5.7

这基本上与 this 2013 年提出的问题相同。除了答案对我不起作用。

我有一个模型App\Post:

 class Post extends Model
 {
   protected $fillable = ['title'];
   // This Model doesn't contain an 'authorname' field
   public function author()
   {
     return $this->belongsTo('App\Author');
   }
 }

和一个模特App\Author:

 class Author extends Model
 {
   protected $fillable = ['name'];

   public function posts()
   {
     return $this->hasMany('App\Post');
   }
 }

还有一个我想保存到该模型的数组:

$posts = [
   ['title'=>'one post', 'authorname' => 'Mickey'],
   ['title'=>'another post', 'authorname' => 'Minny'],
];

foreach($posts as $post){
   $authorModel=App\Author::firstOrCreate(['name'=>$post['authorname']]);
   App\Post::create($post)->author()->associate($authorModel)->save();
}

根据 this 问题,这应该可行,但我得到一个

SQL error 42522: Column not found: 1054 Unknown column 'authorname' in 'field list'

这表明 Laravel 将整个数组转发到 mySQL。有没有办法在不取消设置 authorname 键的情况下完成这项工作?

显然,这是我想要做的事情的简化版本,并且跟踪要取消设置的内容似乎是不必要的 - 因为将所有数组键手动分配给它们各自的数据库字段。

我唯一的想法是,您 运行 DatabaseSeeder 中的这段代码(它会自动取消保护模型),或者您在某个地方手动调用 Eloquent::unguard()(或类似于此的代码)。这可以解释为什么在创建模型时使用任何其他字段,无论 $fillable 属性.