По сути, это тот же вопрос, что и здесь от 2013 года. За исключением того, что ответ не работает для меня.
У меня есть модель 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();
}
Согласно этому вопросу, это должно работать, но я получаю ан
Ошибка SQL 42522: столбец не найден: 1054 Неизвестный столбец «имя автора» в «списке полей»
что предполагает, что Laravel перенаправляет весь массив в mySQL. Есть ли способ заставить это работать, не сбрасывая ключ имени автора?
Очевидно, что это упрощенная версия того, что я хочу сделать, и отслеживание того, что сбрасывать, кажется ненужным, как и назначение всех ключей массива соответствующим полям базы данных вручную.
$post
, верно?$post['authorname']
так бы не работал. - person Jonas Staudenmeir   schedule 11.12.2018In 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'
- person Johanness   schedule 11.12.2018posts
содержит столбецauthorname
? Потому что у вас есть:App\Post::create($post)
где переменная $post имеет это поле... - person Kamil Kiełczewski   schedule 11.12.2018$guarded
в моделиPost
? Используете ли вы дополнительные пакеты? Каков результатdd((new Post($post))->getAttributes());
? - person Jonas Staudenmeir   schedule 11.12.2018