Возвращает массив со всеми дочерними элементами из родительской таблицы Eloquent - PullRequest
0 голосов
/ 22 января 2019

Я использую LARAVEL 5.7, и у меня есть 2 таблицы, называемые "parent_table" с "parent_id, parent_name" и "children_table" с "children_id, children_name". И у меня есть 2 модели с одинаковыми именами таблиц со следующим кодом:

Модель родителя

public function children()
{
    return $this->hasMany('App\children', 'children_id');
} 

Детская модель

public function parent()
{
    return $this->belongsTo('App\parent', 'parent_id');
} 

У меня есть контроллер с этим кодом

$data = App\parent::with("children")->get();
return $data;

Но он возвращает мне только первых детей каждого "родителя". Я хочу знать, что мне нужно добавить в код, чтобы получить всех детей каждого родителя.

Я уже пытаюсь достать всех «родителей» и foreach всех «детей», но это будет для многих запросом к базе данных. спасибо!

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Вы можете сделать что-то вроде этого:

 @foreach($parents as $parent)
{
  $parent->children();
}

Это должно вернуть коллекцию из детской модели. Для получения дополнительной информации вы можете посмотреть здесь: https://laravel.com/docs/5.7/eloquent-relationships#one-to-many

0 голосов
/ 22 января 2019

Через несколько часов я нашел решение.Я не знал, что было важно сделать выбор для внешнего ключа ... вот почему мой запрос не работал.

Конечная родительская модель

 public function children()
 {
    return $this
                ->hasMany('App\children',"parent_id")
                ->select(
                    "children_id",
                    "children_nombre",
                    "parent_id"//I wasn't selecting this guy
                )
                //->with("children2") // With this i got the way to concatenate a lot of subchildren map :D
                ;
 }

Конечная дочерняя модель

public function parent()
{
    return $this->belongsTo('App\parent',"parent_id","parent_id");
}

Контроллер

$data = App\parent::
                select(
                    "parent_id",
                    "parent_nombre"
                )
                ->with("children")
                ->get();

    return $data;

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

0 голосов
/ 22 января 2019

Использование with, как вы сделали в своем примере, будет работать. Возможно, вам нужно поместить 'children' в массив $ appends вашей модели.

namespace App;
class Parent {
  ...
  protected $appends = ['children'];
  ...
}

это добавит дочерний результат при преобразовании модели в массив

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