invoke belongsTo返回null laravel

时间:2015-02-03 14:00:27

标签: php laravel-4

数据库中的表是 地址 ' address_type_id&#39 ;, ' address_type_id&#39 ;, '第1行&#39 ;, ' LINE2&#39 ;, ' line3中&#39 ;, '国家&#39 ;, '城市&#39 ;, ' ZIP_CODE&#39 ;, ' other_detail&#39 ;, ' geo_location_id'

地址类型表 ' address_type_id' ' address_type_name'

这是我的模特

public function Users(){
    return $this->hasOne('User','address_id');
}

public function Address_Type(){
    return $this->belongsTo('Address_Type','address_type_id','address_type_id');
}

public function Geo_Location(){
    return $this->belongsTo('Geo_Location','geo_location_id','geo_location_id');
}

}

public function Address(){
    return $this->hasMany('Address','address_type_id','address_type_id');
}

}

并在Controller中 当我试图获得像这样的地址类型时

$address1=Address::find(1);

$geo=$address1->Geo_Location;
return Response::json(
    array(
        'error'   => false,
        'Address_Type' =>$address1->Address_Type),

    200
);

}); 结果返回null

1 个答案:

答案 0 :(得分:0)

问题在于您的关系方法的命名。在做$address1->Address_Type时会发生这种情况:

首先,调用__get()中的Illuminate\Database\Eloquent\Model,代理到getAttribute()。在那里,它首先检查一些其他的东西,然后就是这样:

$camelKey = camel_case($key);

if (method_exists($this, $camelKey))
{
    return $this->getRelationshipFromMethod($key, $camelKey);
}

如您所见,属性名称Address_Type已转换为camelCase。它变为addressType

现在虽然PHP并不关心AddressTypeaDdReSsTyPe下划线是否有所作为。

解决方案

更改您的关系名称。我建议addressTypegeoLocation但正如我之前提到的,唯一重要的是你失去了_