能否雄辩地忽略Laravel 5.7中无关的数据

时间:2018-12-11 16:10:50

标签: laravel laravel-5 eloquent laravel-5.7

从2013年开始,这基本上是与this相同的问题。除了答案对我不起作用。

我有一个Model 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');
   }
 }

和模型应用程序\作者:

 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错误42522:找不到列:1054“字段列表”中的未知列“ authorname”

这表明Laravel将整个数组转发到mySQL。有没有一种方法可以在不重置authorname密钥的情况下进行这项工作?

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

1 个答案:

答案 0 :(得分:1)

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