从父表返回所有孩子的数组

时间:2019-01-21 23:44:54

标签: php laravel eloquent

我正在使用LARAVEL 5.7,我有2个表,它们的表名为“ parent_table”和“ children_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 :(得分:1)

您可以执行以下操作:

os.path.abspath(destination)

这应该返回Children模型的集合。有关更多信息,请参见此处: https://laravel.com/docs/5.7/eloquent-relationships#one-to-many

答案 1 :(得分:0)

像您在示例中一样使用with可以正常工作。也许您必须在模型的$ appends数组中放置“ children”。

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

这将在模型转换为数组时附加子级结果

答案 2 :(得分:0)

几个小时后,我找到了解决方案。我不知道对外键进行选择很重要……这就是为什么我的查询无法正常工作的原因。

最终父母模型

 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;

我今天学到了一些新东西,希望这个答案对其他幼稚的学习者也有帮助