我们正在寻求从专有服务器存储房地产信息(我们正在使用PHRETS来检索数据,并使用MySQL来存储数据)。旧代码是程序性的,并且使用数组,但是我认为与其编写自己的对象,不如使用Eloquent 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检索的,因此应该可以。
让我知道你的想法。非常感谢!
最佳答案
从您的记录看来,您似乎需要创建这些模型及其关系。它会给你基本的想法
这是Eloquent模型及其表结构,您可以添加修改它,但是它应该像这样
带表模型
1.属性(表:属性(ID,名称,描述,listing_id,type_id,created_at,updated_at))
2. agent_property(id,property_id,agent_id,created_at,updated_at)不需要为其创建模型
2.代理商(表:代理商(ID,名称,office_id,created_at,updated_at))存储代理商详细信息
3.网站(表:网站(id,名称,ownerable_id,ownerable_type,created_at,updated_at))
4.办公室(表:办公室(id,名称,address_id,created_at,updated_at))
5.地址(表:地址(id,邮政编码,街道,line1,line,城市,省,国家,created_at,updated_at))
6.电话(表:电话(id,号码,phoneble_id,phoneble_type,created_at,updated_at))
7.类型(表:类型(ID,名称,created_at,updated_at))
8.建筑物(表:建筑物(id,property_id,cooling_type,firewall_present,...,created_at,updated_at))
您将在此处https://laravel.com/docs/5.6/eloquent#defining-models获得所有Eloquent模型的详细信息。
现在这些模型之间的雄辩关系应该像
这个
属性属于类型(在属性模型中)
物业hasOne建筑物(在物业模型中)
财产归属于多个代理(在财产模型中,使用agent_property
数据透视表)
代理的belongsToMany属性(在代理模型中,使用agent_property
数据透视表)
代理属于办公室(在代理模型中)
代理人hasMany网站(在代理人模型中)
Office hasMany Phone(在Office型号中,使用polymorphic relation)
办公室归属地址(在办公室模型中)
网站morphTo(在网站模型中,polymorphic relation)
手机morphTo(在手机型号中,polymorphic relation)
您将在这里获取所有关系详细信息https://laravel.com/docs/5.6/eloquent-relationships
希望它可以给你一些想法
关于php - 如何使用PHP/Laravel建立模型并存储数据流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51433525/