首页 > 解决方案 > 可以雄辩地忽略 Laravel 5.7 中的不相关数据

问题描述

这基本上是与此相同的问题。除了答案对我不起作用。

我有一个模型应用\帖子:

 class Post extends Model
 {
   protected $fillable = ['title'];
   // This Model doesn't contain an 'authorname' field
   public function author()
   {
     return $this->belongsTo('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();
}

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

SQL 错误 42522:找不到列:1054 '字段列表'中的未知列'作者名'

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

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

标签: laravellaravel-5eloquentlaravel-5.7

解决方案


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


推荐阅读