#laravel
Вопрос:
У меня есть отношения между родителями и детьми
Родительская модель
public function child() {
return $this->hasMany(Child::class);
}
Детская Модель
public function parent() {
return $this->belongsTo(Parent::class);
}
Апп
Я получаю родительскую коллекцию, которую я использую в другом месте
$this->parent = Parent::where('active', true)->with('child')->get()
Проблема
У меня есть функция по щелчку мыши, в которой я получаю только идентификатор ребенка. Поэтому я пытаюсь найти ребенка в родительской коллекции.
public function click($id) {
$child = $this->parent->child()->find('id', $id)->first();
}
Ошибка —
Метод IlluminateБаза данныхКрасноречиваяКоллекция::дочерний элемент не существует.
Возможно ли получить ребенка из существующей коллекции, я знаю, что мог бы сделать еще один запрос к БД, но на самом деле не хочу делать еще один запрос, так как у меня уже есть данные только там.
$this->родитель->>toArray()
array:2 [▼
0 => array:11 [▼
"id" => 1
"active" => 1
"name" => "Foo"
"child" => array:3 [▼
0 => array:3 [▼
"id" => 1
"parent_id" => 1
"name" => "S/M"
]
1 => array:3 [▼
"id" => 2
"parent_id" => 1
"name" => "L/XL"
]
2 => array:3 [▼
"id" => 3
"parent_id" => 1
"name" => "2XL"
]
]
]
Ответ №1:
Вы можете использовать where condition
для поиска с помощью идентификатора ребенка
$this->parent->where('child.id', $id)->first()
если вы хотите найти идентификатор родителя, то
$this->parent->find($id)
у вас есть много данных, так что
$this->parent->filter(function ($value)use($id){
return $value->child->find($id);
})->first();
Комментарии:
1. Это возвращает значение null
2. можете ли вы показать, какие выходные данные у вас есть в dd($this->parent->>toArray());
3. @TonySawlwin видит, что дочерний элемент пуст, поэтому он возвращает значение null, если вы используете родителя, то это должно быть $this->родитель->>где(‘id’, $id)->>>первый()
4. Извините, что я нажал «Ввод» в начале (теперь отредактировано), но у ребенка 3
5. @TonySawlwin, тогда это должно сработать .можете ли вы добавить в вопрос, что у вас есть в dd($this->parent->>toArray());