2015-02-17 3 views
1

У меня возникли проблемы с вызовом метода отношений на модели по отражению. Мои модели:Яркое отражение модели над методом отношений

class User extends \Eloquent 
{ 
    public function city() 
    { 
     return $this->belongsTo('City', 'city_id', 'id'); 
    } 
} 

class City extends \Eloquent 
{ 
} 

Когда я вызываю метод города по примеру ReflectionMethod на классе User я не получаю модель City. Я думаю, что проблема связана с отложенной загрузкой красноречива, но я не могу получить никакого света над проблемой :(Любых идей

Заранее спасибо за ответы

Update:!

Мой код отражения:..

$rc = new \ReflectionClass($model); 

if ($rc->hasMethod($fieldName)) { 
    // This two calls below are returning: "Relationship method must return 
    // an object of type Illuminate\Database\Eloquent\Relations\Relation" 
    $relation = $rc->getMethod('getAttribute')->invoke($model, $fieldName); 

    $rc->getMethod($fieldName)->invoke($model); 

    // And this one is returning: "Property city does not exist" 
    $rp = $rc->getProperty($fieldName); 
} 

ответ

0

Вызов отношение метода никогда не будет возвращать модель возвращает объект отношения Вы можете получить модель путем доступа к динамическому свойству city (или по телефону getAttribute('city')) или путем вызова метода отношений, а затем get()->city()->get().

Для более глубокого анализа в ->city и ->city() см my answer on this post

+0

Если вам нужна дополнительная помощь, покажите мне код, в котором вы пытаетесь использовать 'ReflectionMethod' – lukasgeiter

+0

Спасибо за ваш ответ, объяснение в связанном сообщении помогло мне понять, как это работает. Но я все еще не могу получить модель с помощью Reflection. Если я попытаюсь вызвать 'getProperty' на экземпляр' ReflectionClass', он вернет «Свойство не существует», и если я попытаюсь вызвать 'getAttribute' или непосредственно' -> city() -> get() 'over' ReflectionMethod', возвращаемая ошибка - метод отношения должен возвращать объект типа Illuminate \ Database \ Eloquent \ Relations \ Relation'. Теперь я обновлю исходный ответ с кодом отражения. – ablunier

+0

И модель, с которой вы ее тестируете, является моделью «Пользователь» из вашего вопроса? – lukasgeiter

0

На Select2 версии 4, я столкнулся с проблемой, которая меня в тупик в течение минуты, и, надеюсь, кто-то, кто работает в том же номере будет найти это сообщение полезно.

Я использовал «templateSelection», и это вызывало проблему с предварительной настройкой значения выбора, поскольку оно не возвращало правильную информацию из моего ответа ajax. Это была моя ошибка:

templateSelection: function(repo){ 

    if(typeof repo.name != 'undefined'){ 
     return repo.name; 
    } 

    return repo.text; 
} 

Мой ответ Аякса возвращал «имя» значение в моем ответе, но когда я установил опцию предварительного выбора, он возвращался с «текст». Поэтому я просто сделал чек.