Найти ребенка по идентификатору из коллекции родительского laravel

#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());