如何使用php/laravel建立模型和存储数据流

fd3cxomn  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(312)

我们正在寻找从专有服务器存储房地产信息(我们使用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检索的,所以这应该没问题。
让我知道你的想法。非常感谢!

lokaqttq

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
希望能给你一些建议

相关问题