Laravel 5 Eager Загрузка не работает

Я смотрю на результаты поиска с этой проблемой, но не могу заставить ее работать.

Модель пользователя:

<?php namespace Module\Core\Models;

class User extends Model {

(...)

protected function Person() {
return $this->belongsTo( 'Module\Core\Models\Person', 'person_id' );
}

(...)

И Модель человека:

<?php namespace Module\Core\Models;

class Person extends Model {

(...)

protected function User(){
return $this->hasOne('Module\Core\Models\User', 'person_id');
}

(...)

Теперь, если я использую User :: find (1) -> Person-> first_name, его работа. Я могу получить отношения Персон из Модели пользователя.

Но.. Пользователь :: с ( ‘Персона’) -> Get () терпит неудачу с Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: Person ()

Что я делаю не так? мне нужна коллекция всех пользователей с их информацией о персоне.

0

Решение

Вы должны объявить методы отношений как public,

Это почему? Давайте посмотрим на with() метод:

public static function with($relations)
{
if (is_string($relations)) $relations = func_get_args();

$instance = new static;

return $instance->newQuery()->with($relations);
}

Так как метод вызывается из статического контекста, он не может просто вызвать $this->Person(), Вместо этого он создает новый экземпляр модели и создает экземпляр построителя запросов и вызывает with на то и так далее. В конце концов, метод отношений должен быть доступен из вне модель. Вот почему видимость должна быть public,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]