Я смотрю на результаты поиска с этой проблемой, но не могу заставить ее работать.
Модель пользователя:
<?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 ()
Что я делаю не так? мне нужна коллекция всех пользователей с их информацией о персоне.
Вы должны объявить методы отношений как 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
,
Других решений пока нет …