数据库中的表是地址"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
下划线会有所作为。
解决方案
更改关系名称。我建议addressType
,geoLocation
但正如我之前提到的,唯一重要的是你失去了_
.