Laravel, получить данные об отношениях - PullRequest
2 голосов
/ 22 мая 2019

Я немного знаком с отношениями в Laravel.

Когда я делаю 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"

Как я могу получить nameзначение из модели SubMenu, которая имеет отношение с моим дд (модель)?

В Menu Я получил это отношение:

public function subMenus()
{
    return $this->belongsToMany('App\SubMenu', 'menu_submenu', 'menu_id', 'submenu_id')->where('estado', Define::ESTADO_ACTIVO)->orderBy('orden');
}

Я пробовал что-то вроде:

dd($MyMenuObject->subMenus());

но не работает.Пробовал с get (), -> подменю и т. Д.

РЕДАКТИРОВАТЬ: Это мои данные:

с dd($perfil_activo->menus); Я получаю:

enter image description here

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Вы можете получить к нему доступ через

$model->subMenus()->first()->name;

Но поскольку $subMenus() является отношением многие-ко-многим, вам, вероятно, следует сделать это с помощью цикла:

foreach($model->subMenus AS $subMenu){
   $subMenu->name; // Do with as you please.
}

Редактировать: Поскольку $model также является Collection, вам необходимо использовать ->first() или цикл:

$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(), это будет Collection.Если оно заканчивается на ->first(), ->find() и т. Д., Это будет один Model.

1 голос
/ 22 мая 2019

Вы можете перечислить все имена подменю в массиве: или объект

$names=$model->subMenus()->pluck('name'); //object
//or
$names=$model->subMenus()->pluck('name')->toArray();// to array
dd($names);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...