【问题标题】:Can eloquent ignore irrelevant data in Laravel 5.7可以雄辩地忽略 Laravel 5.7 中的不相关数据
【发布时间】:2019-05-12 16:14:47
【问题描述】:

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

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

 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。有没有办法在不取消作者名键的情况下完成这项工作?

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

【问题讨论】:

  • 请将整个错误消息与执行的查询一起发布。
  • 你在循环$post,对吧? $post['authorname'] 不会这样工作。
  • 我的错。剪掉太多。已更正...
  • @Jonas Staudenmeir:我得到的整个错误是:In Connection.php line 664: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'authorname' in 'field list' (SQL: insert into 'posts' ('name', 'authorname', 'updat ed_at', 'created_at') values (Frau Meier, die Amsel, Kathrin Leuenberger, 2018-12-11 16:05:28, 2018-12-11 16:05:28)) In Connection.php line 452: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'authorname' in 'field list'
  • 您的posts 表是否包含authorname 列?因为您有:App\Post::create($post) 其中 $post 变量具有该字段...

标签: laravel laravel-5 eloquent laravel-5.7


【解决方案1】:

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

【讨论】:

  • 我的(从某处复制的)播种机代码被 unguard//guard 模型包围。为了测试,如果这是问题所在,我将它们注释掉 - 没有意识到,播种机默认情况下会不加保护。
  • 这也使可填充模型成为星号,具体如何在保存时忽略未知列
猜你喜欢
  • 2023-03-12
  • 2023-03-11
  • 2019-03-10
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 2018-11-12
相关资源
最近更新 更多