invoke belongsTo return null laravel


invoke belongsTo return null laravel

数据库中的表是地址"address_type_id","address_type_id","第 1 行","第 2 行","第 3 行","国家","城市","zip_code","other_detail","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');
}

}

和控制器当我尝试获取这样的地址类型

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

});结果返回空

问题是关系方法的命名。执行$address1->Address_Type时,将发生以下情况:

首先,Illuminate'Database'Eloquent'Model中的__get()被称为,它代理getAttribute()。在那里,它首先检查其他一些事情,然后是这个:

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

如您所见,Address_Type获取的属性名称已转换为驼峰案例。它变得addressType.

现在,虽然PHP不在乎它是AddressType还是aDdReSsTyPe下划线会有所作为。

解决方案

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