Я создаю API (Laravel 5) для RPG-игры и пытаюсь заполнить данные.
Каждый уровень содержит много квестов, и каждый квест принадлежит одному уровню.
Глядя через Laravel docs, Я вижу только отношения для вставки связанных данных модели для одного: один (associate
) и много: много (sync, attach
), но ничего для примера одного: много (level has many quests, but quests only have one level
).
Ниже вы можете увидеть, что я пытаюсь случайным образом связать несколько квестов с уровнями. Я также пытался attach
а также sync
но получите ошибки
Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: associate ()
а также
Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: attach ()
Модель уровня:
public function quests()
{
return $this->hasMany(Quest::class);
}
Модель квеста:
public function levels()
{
return $this->belongsTo(Level::class);
}
Уровень Сеялка:
public function run()
{
Eloquent::unguard();
$levels = $this->createLevels();
$quests = Quest::all()->toArray();
/*
* Randomly join level id with associated quest ids
*/
foreach ($levels as $level) {
$level->quests()->associate($quests[rand(0, count($quests) - 1)]['id']);
}
Вы можете использовать save()
метод, заявленный @Mithredate.
foreach ($levels as $level) {
$quest->levels()->save($level);
}
Используйте красноречивый save()
метод. Вы можете найти документацию Вот