我在模型上通过反射调用关系方法时遇到问题。我的模特是:
class User extends \Eloquent
{
public function city()
{
return $this->belongsTo('City', 'city_id', 'id');
}
}
class City extends \Eloquent
{
}
当我在User类的ReflectionMethod实例上调用city方法时,我没有得到City模型。我认为这个问题与Eloquent延迟加载有关,但我无法解决问题:(任何想法?
提前感谢您的回答!
更新
我的反思代码:
$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 :(得分:0)
调用关系方法将永远不会返回模型。它返回关系对象。您可以通过访问动态属性city
(或调用getAttribute('city')
)或调用关系方法然后get()
->city()->get()
来获取模型。
要对->city
和->city()
进行更深入的分析,请参阅my answer on this post
答案 1 :(得分:0)
在Select2第4版上,我遇到了一个问题让我感到困惑了一分钟,希望任何遇到同一问题的人都会觉得这篇文章很有帮助。
我一直在使用“templateSelection”,这导致了预先设置选择值的问题,因为它没有从我的ajax响应中返回正确的信息。这是我的修复:
templateSelection: function(repo){
if(typeof repo.name != 'undefined'){
return repo.name;
}
return repo.text;
}
我的ajax响应在我的回复中返回了一个“名称”值但是当我设置一个预选选项时,它会以“文本”返回。所以我只是做了一个检查。