У меня возникли проблемы с функцией hasMany red redquent на Laravel. В принципе, есть модель под названием Элемент, который структурирован как граф. Он состоит из id и next_id.Laravel Преобразование коллекции определенного вида объекта в другой
Я установил функцию, которая возвращает следующий элемент на графике.
public function next() {
if($this->element_type->id == 2) {
return $this->subelement->answers();
} else {
return $this->hasOne(Element::class, 'id', 'next_id');
}
}
Всякий раз, когда он входит в инструкцию «else», он работает нормально. Это дает мне следующий узел списка с точки зрения Element. Проблема заключается в том, когда она отвечает условию $ this-> element_type-> == ид 2
функции, которые я использую для этого случая являются:
On 'Element' Модель
public function subelement() {
return $this->hasOne(Branch::class);
}
On ' Филиал 'Модель
public function answers() {
return $this->hasMany(Answer::class, 'branch_id', 'id');
}
So 1 Element связан с 1 веткой, которая связана со многими ответами. Из этого, что я получаю в результате возврата $ this-> subelement-> answers(), является сборник «Ответ». То, что я действительно хотел, было сборкой «Элемента», которые являются узлами графика. Но я не могу понять, как преобразовать всю эту коллекцию. У меня есть функция, чтобы превратить один элемент из «Ответ» на «Element»
On «Ответ» Модель
public function element() {
return $this->belongsTo(Element::class);
}
Но я не могу понять, как превратить каждый элемент из коллекции в есть целая коллекция «Элементов».
Любые подсказки? Спасибо.
не работает? 'return $ this-> subelement-> answers-> element();' Также, когда вы возвращаетесь в свой foreach, '$ value-> element() -> get()' также будет работать. – Atiqur
Вы правы в отношении foreach, этот метод действительно работает. Но когда я пытаюсь вернуть 'return $ this-> subelement-> answers-> element();' он дает мне _BadMethodCallException с сообщением 'Method element does not exist._ Один из способов заставить его работать, но не так, как я предполагал, должен был вернуться за один из ответов 'return $ this-> subelement-> answer [0] -> element();'. Но я действительно хотел вернуть их всех как «Элемент». – mauriciomta