我正在使用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的所有“孩子”,但是对数据库的请求很多。谢谢!
答案 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;
我今天学到了一些新东西,希望这个答案对其他幼稚的学习者也有帮助