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