我们正在寻找从专有服务器存储房地产信息(我们使用phrets检索数据,mysql存储数据)。旧代码是过程性的,并且使用数组,但是我认为与其编写我们自己的对象,不如使用雄辩的orm,让laravel来完成繁重的工作。
数据流的结构对于它发送的每个不动产属性都是可重复的,但是数据只会保留它不包含的信息(例如。 $property['AgentDetails']['Position']
可能不会完全发送,如果他们的端部不存在)。
另一个警告是,一些数据是在多维数组中接收的,这些数组当前需要循环并存储在单独的、规范化的表中( propertyAddress
, propertyAgentDetails
, propertyPhotos
等)。这意味着数据可以作为 $property['AgentDetails'][0]
... $property['AgentDetails'][2]
因为它包含多个列表代理或 $property['AgentDetails']
如果有一个上市代理。
然后我们必须在属性id上使用大量连接来检索这些数据。
我希望建立一个laravel模型和控制器来完成繁重的工作,并处理这个数据流(如果不存在,则插入,如果存在,则更新),简化的结构类似于此,
array(#) {
["@attributes"]=>
array(2) {
["ID"]=>
string(7) "444444"
["LastUpdated"]=>
string(29) "Fri, 13 Jul 2018 17:18:20 GMT"
}
["ListingID"]=>
string(7) "3333333"
["AgentDetails"]=>
array(6) {
["@attributes"]=>
array(1) {
["ID"]=>
string(7) "2222222"
}
["Name"]=>
string(14) "AGENT NAME"
["Websites"]=>
array(1) {
["Website"]=>
string(26) "http://example.com"
}
["Office"]=>
array(7) {
["@attributes"]=>
array(1) {
["ID"]=>
string(5) "111111"
}
["Name"]=>
string(27) "REALTY CO"
["Address"]=>
array(5) {
["StreetAddress"]=>
string(19) "59 main st. west"
["AddressLine1"]=>
string(19) "59 main st. west"
["City"]=>
string(7) "city"
["Province"]=>
string(2) "province"
["PostalCode"]=>
string(6) "H0H0H0"
}
["Phones"]=>
array(1) {
["Phone"]=>
array(1) {
[0]=>
string(14) "(555) 555-5555"
}
}
["Websites"]=>
array(1) {
["Website"]=>
string(30) "http://www.example.com"
}
["OrganizationType"]=>
string(4) "Firm"
["Franchisor"]=>
string(11) "Independent"
}
}
["Building"]=>
array(7) {
["CoolingType"]=>
string(15) "Air Conditioned"
["FireplacePresent"]=>
string(5) "False"
["FireProtection"]=>
string(21) "Full Sprinkler System"
["HeatingType"]=>
string(29) "Baseboard heaters, Forced air"
["SizeInterior"]=>
string(10) "15000.0000"
["TotalFinishedArea"]=>
string(10) "15000 sqft"
["UtilityWater"]=>
string(15) "Municipal water"
}
["Land"]=>
array(1) {
["Acreage"]=>
string(5) "false"
}
["Address"]=>
array(8) {
["StreetAddress"]=>
string(13) "301 main"
["AddressLine1"]=>
string(13) "301 main"
["StreetNumber"]=>
string(3) "301"
["StreetName"]=>
string(9) "main"
["City"]=>
string(7) "city"
["Province"]=>
string(7) "province"
["PostalCode"]=>
string(6) "H0H0H0"
["Country"]=>
string(6) "Canada"
}
["PropertyType"]=>
string(10) "Industrial"
["ZoningDescription"]=>
string(4) "COMM"
}
对于如何使用laravel&eloquent/orm来处理这样复杂(但可重复)的数据结构和数据流,有没有最佳实践?
我想我可以继续练习使用不同的迁移/数据库结构,并测试如何最佳地存储和检索数据,但我认为首先了解最佳实践或其他人首先尝试的事情会有所帮助。
我的直觉是,存储和检索数据的最简单方法是完全类似于数据结构,并在每次结构更改时更新它。数据是通过一个版本化的api检索的,所以这应该没问题。
让我知道你的想法。非常感谢!
1条答案
按热度按时间lokaqttq1#
从你的记录来看,你似乎需要创建这些模型和它们的关系。它会给你基本的想法
下面是雄辩的模型及其表结构,您可以添加或修改它,但它应该是这样的
带表格的模型
1属性(表:属性(id、名称、描述、列表id、类型id、创建时间、更新时间))
2为其创建模型时不需要代理\u属性(id、property \u id、agent \u id、created \u at、updated \u at)
2代理(表:代理(id,name,office\u id,created\u at,updated\u at))存储代理详细信息
三。网站(表:网站(id、名称、可拥有的id、可拥有的类型、创建时间、更新时间))
4办公室(表:办公室(id、名称、地址、创建时间、更新时间))
5地址(表:地址(id、邮政编码、街道、第1行、城市、省、国家、创建地址、更新地址))
6电话(表:电话(id、号码、电话号码、电话类型、创建时间、更新时间))
7类型(表:类型(id、名称、创建时间、更新时间))
8建筑物(表:建筑物(id、属性id、冷却类型、壁炉存在、创建时间、更新时间))
你将在这里得到所有雄辩的模型细节https://laravel.com/docs/5.6/eloquent#defining-模型
现在,这些模型之间雄辩的关系应该是这样的
属性属于类型(在属性模型中)
地产hasone建筑(在地产模型中)
属性归属于多个代理(在属性模型中,使用
agent_property
数据透视表)agent belongdomany属性(在agent模型中,使用
agent_property
数据透视表)代理归属于办公室(在代理模型中)
代理拥有多个网站(在代理模型中)
office有许多电话(在office模型中,使用多态关系)
office belongsto地址(在office模型中)
网站变形(在网站模型中,多态关系)
phone morphto(在phone模型中,多态关系)
你会在这里得到所有的关系细节https://laravel.com/docs/5.6/eloquent-relationships
希望能给你一些建议