【发布时间】: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