Laravel 拉威尔,获取关系数据
我对拉拉维尔的关系有点陌生 当我对一个对象执行Laravel 拉威尔,获取关系数据,laravel,Laravel,我对拉拉维尔的关系有点陌生 当我对一个对象执行dd操作时,我得到以下结果: Collection {#485 ▼ #items: array:1 [▼ 0 => Menu {#484 ▼ #table: "menus" #fillable: array:6 [] #hidden: array:2 [▶] #connection: null #primaryKey: "id" #perPage: 15
dd
操作时,我得到以下结果:
Collection {#485 ▼
#items: array:1 [▼
0 => Menu {#484 ▼
#table: "menus"
#fillable: array:6 []
#hidden: array:2 [▶]
#connection: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:9 []
#original: array:11 []
#relations: array:2 [▼
"pivot" => Pivot {#486 ▶}
"subMenus" => Collection {#items: array:3 [▼
0 => SubMenu {#488 ▼
#table: "sub_menus"
#fillable: array:5 []
#hidden: array:2 []
#connection: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:8 []
#original: array:10 [▼
"id" => 16
"name" => "My name" <--------- this is what I need to get
"created_at" => "2018-11-20 15:19:14"
"updated_at" => "2018-11-20 20:29:34"
我试过这样的方法:
dd($MyMenuObject->subMenus());
但不起作用。尝试使用get(),->子菜单等
编辑:这是我的数据:
使用dd($perfil\u activo->菜单)代码>我得到:
您可以通过
$model->subMenus()->first()->name;
但是由于$subMenus()
是一种多对多关系,您可能应该通过循环来实现这一点:
foreach($model->subMenus AS $subMenu){
$subMenu->name; // Do with as you please.
}
编辑:由于$model
也是一个集合
,因此需要首先使用->()
或循环:
$model->first()->subMenus->first()->name;
// OR
foreach($model AS $model){
$model->subMenus->first()->name;
// OR
foreach($model->subMenus AS $subMenu){
$subMenu->name;
}
}
这完全取决于如何获取$model
;如果您的查询以一个->get()
或->all()
结束,它将是一个集合。如果它以->first()
,->find()
等结尾,则它将是一个模型
您可以列出数组或对象上的所有子菜单名
$names=$model->subMenus()->pluck('name'); //object
//or
$names=$model->subMenus()->pluck('name')->toArray();// to array
dd($names);
我不明白为什么会这样:方法子菜单不存在。
哦,你的$model
也是一个集合,所以你需要先循环或使用->方法();我会更新。我在问题中放了一张我真实dd的图片。好吧,用$prefil\u activo
替换$model
,用nombre
:)替换name
),但这个概念仍然存在。没问题:)注意子菜单[0]
和子菜单-/first()
是可互换的;进一步了解什么是集合
,以及如何使用它的方法使阵列访问变得更加容易。干杯
$names=$model->subMenus()->pluck('name'); //object
//or
$names=$model->subMenus()->pluck('name')->toArray();// to array
dd($names);