Laravel, не могу получить собственность коллекции - PullRequest
0 голосов
/ 27 января 2020

У меня есть коллекция формы моей формы obj, и я пытаюсь получить все страницы, принадлежащие этой форме, когда я делаю $survey = Forms::find(68)->with('pages')->get(); Я получаю это:

Illuminate\Database\Eloquent\Collection {#522 ▼
  #items: array:18 [▼
    0 => App\Models\Forms {#562 ▼
      #table: "forms"
      #fillable: array:4 [▶]
      #connection: "mysql"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:9 [▶]
      #original: array:9 [▶]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: array:1 [▼
        "pages" => Illuminate\Database\Eloquent\Collection {#596 ▼
          #items: array:5 [▼
            0 => App\Models\Pages {#628 ▶}
            1 => App\Models\Pages {#632 ▶}
            2 => App\Models\Pages {#633 ▶}
            3 => App\Models\Pages {#634 ▶}
            4 => App\Models\Pages {#635 ▶}
          ]
        }
      ]
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [▶]
    }
   ]
}

, но не могу получить свойство отношений , когда я делаю $ form-> pages Iam, получая ноль пытаясь получить результаты:

   public function index()
    {

        $survey = Forms::with('pages')->find(68);//Did update regarding to sugestion

        dd($survey);


        return view("pages.surveys", compact('survey'));
    }

Спасибо за любую помощь. Грег

Ответы [ 5 ]

2 голосов
/ 27 января 2020

Я думаю, вам следует изменить порядок функций with() и find().

$survey = Forms::with('pages')->find(68);

Обратите внимание, что find() фактически выполняет запрос, поэтому вам не нужно использовать get() снова. Как правило: если вам нужно получить только один результат из вашего запроса, вы должны использовать first() или find() (последний также может быть использован для получения коллекций), в противном случае используйте all() или get() для получить коллекцию результатов.

1 голос
/ 27 января 2020
$form = Forms::find(68);
dd($form->pages);

ИЛИ

$form = Form::find(68)->pages->get(); //It will return all the pages having relation

попробуйте это, сначала он найдет форму с идентификатором '68', а затем в соответствии с заданным отношением получит записи

0 голосов
/ 27 января 2020

Кажется, почти все твои коды в порядке. Это может быть проблемой только с вашим внешним ключом. В ваших отношениях страниц в ваших формах laravel будет ожидать внешнего ключа в вашей таблице страниц, а именно 'form_id' или 'forms_id', поскольку вы не передаете второй аргумент в ваших отношениях страниц. Убедитесь, что при переносе ваших страниц ваш внешний ключ также имеет значение form_id

0 голосов
/ 27 января 2020

когда я делаю дд (опрос $);

   App\Models\Forms {#513 ▼
  #table: "forms"
  #fillable: array:4 [▶]
  #connection: "mysql"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:9 [▶]
  #original: array:9 [▶]
  #changes: []
  #casts: []
  #dates: []
  #dateFormat: null
  #appends: []
  #dispatchesEvents: []
  #observables: []
  #relations: array:1 [▼
    "pages" => Illuminate\Database\Eloquent\Collection {#521 ▼
      #items: array:6 [▼
        0 => App\Models\Pages {#552 ▼
          #table: "pages"
          +timestamps: false
          #fillable: array:4 [▶]
          #connection: "mysql"
          #primaryKey: "id"
          #keyType: "int"
          +incrementing: true
          #with: []
          #withCount: []
          #perPage: 15
          +exists: true
          +wasRecentlyCreated: false
          #attributes: array:6 [▶]
          #original: array:6 [▶]
          #changes: []
          #casts: []
          #dates: []
          #dateFormat: null
          #appends: []
          #dispatchesEvents: []
          #observables: []
          #relations: []
          #touches: []
          #hidden: []
          #visible: []
          #guarded: array:1 [▶]
        }
        1 => App\Models\Pages {#553 ▶}
        2 => App\Models\Pages {#554 ▶}
        3 => App\Models\Pages {#555 ▶}
        4 => App\Models\Pages {#556 ▶}
        5 => App\Models\Pages {#557 ▶}
      ]
    }
  ]
  #touches: []
  +timestamps: true
  #hidden: []
  #visible: []
  #guarded: array:1 [▶]
}
0 голосов
/ 27 января 2020

Попробуйте

$survey = Forms::with('pages')->find(68);

см. Ссылку

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...