Это в основном тот же вопрос, что и это здесь с 2013 года. За исключением того, что ответ не работает для меня.
У меня есть модельное приложение \ 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();
}
Согласно этот вопрос, это должно работать, но я получаю
Ошибка SQL 42522: Столбец не найден: 1054 Неизвестный столбец «имя автора» в «списке полей»
, который предлагает Laravel впередвесь массив к MySQL.Есть ли способ заставить это работать без сброса ключа имени автора?
Очевидно, что это упрощенная версия того, что я хочу сделать, и отслеживание того, что нужно сбросить, кажется ненужным - как если бы все ключи массива присваивались соответствующим полям базы данных вручную.