Может красноречиво игнорировать нерелевантные данные в Laravel 5.7 - PullRequest
0 голосов
/ 11 декабря 2018

Это в основном тот же вопрос, что и это здесь с 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.Есть ли способ заставить это работать без сброса ключа имени автора?

Очевидно, что это упрощенная версия того, что я хочу сделать, и отслеживание того, что нужно сбросить, кажется ненужным - как если бы все ключи массива присваивались соответствующим полям базы данных вручную.

1 Ответ

0 голосов
/ 11 декабря 2018

Единственная идея, которая у меня есть, заключается в том, что вы запускаете этот код в DatabaseSeeder (который автоматически не защищает модели) или где-то вручную вызываете Eloquent::unguard() (или код, подобный этому).Это объясняет, почему при создании модели используются любые другие поля независимо от свойства $fillable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...