laravel - 可以雄辩地忽略 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。有没有办法在不取消作者名键的情况下完成这项工作?
显然,这是我想要做的简化版本,并且跟踪要取消设置的内容似乎是不必要的 - 就像手动将所有数组键分配给它们各自的数据库字段一样。
解决方案
我在这里唯一的想法是您在 DatabaseSeeder 中运行此代码(它会自动解除模型的保护),或者您在某个地方手动调用Eloquent::unguard()
(或类似的代码)。这可以解释为什么在创建模型时使用任何其他字段,而不管$fillable
属性如何。
推荐阅读
- python - keras:当未启用急切执行时,张量对象不可迭代
- symfony4 - Symfony 4:创建自定义服务错误:期望找到类
- node.js - 猫鼬 findOne() 不返回承诺
- d3.js - 更新模式,退出并移除
- python-3.x - 函数在python中不共享值
- microsoft-cognitive - Microsoft 自定义语音服务缺少听写方案
- xml - 使用 XSLT 1.0 将可变长度分隔列表转换为 XML
- graph - 为什么在找到顶点的度数时自循环计数两次?
- c# - Unity C# 在 android 上点击和滑动
- postgresql - PgAdmin4 在连接时询问我的私钥的密码