php - 如何使用 PHP/Laravel 设置模型并存储数据流

标签 php mysql laravel laravel-5 orm

我们希望从专有服务器存储房地产信息(我们使用 PHRETS 检索数据并使用 MySQL 来存储数据)。旧代码是过程性的并使用数组,但我认为最好使用 Eloquent ORM 并让 Laravel 完成繁重的工作,而不是编写我们自己的对象。

数据流的结构对于它发送的每个房地产都是可重复的,但数据将简单地保留它不包含的信息(例如$property['AgentDetails']['Position'] 如果其端不存在,则可能不会完全发送)。

另一个需要注意的是,一些数据是在多维数组中接收的,这些数据当前需要循环并存储在单独的规范化表中(propertyAddresspropertyAgentDetailspropertyPhotos 等)。这意味着数据可以作为 $property['AgentDetails'][0] ... $property['AgentDetails'][2] 发送,因为它包含多个列表代理或 $property['AgentDetails'](如果有一个挂牌代理)。

然后,我们必须通过属性 ID 上的大量联接来检索此数据。

我正在寻找设置一个 Laravel 模型和 Controller 来完成繁重的工作并处理此数据流(如果不存在则插入,如果存在则更新),其中简化的结构类似于此,

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 模型及其表结构,您可以添加修改它,但应该是这样的

Model with Tables

<强>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、城市、省份、国家/地区、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))

您将在此处获得所有 Eloquent 模型详细信息 https://laravel.com/docs/5.6/eloquent#defining-models

Now the Eloquent relationship between these models should be like this

  1. 属性belongsTo类型(在属性模型中)

  2. 特性hasOne建筑物(在特性模型中)

  3. 属性belongsToMany代理(在属性模型中,使用agent_property数据透视表)

  4. 代理belongsToMany属性(在代理模型中,使用agent_property数据透视表)

  5. 代理属于办公室(在代理模式中)

  6. 代理hasMany网站(在代理模型中)

  7. Office hasMany 电话(在 Office 模型中,使用 polymorphic relation )

  8. 办公室属于地址(在办公室模型中)

  9. 网站morphTo(在网站模型中,polymorphic relation)

  10. 手机morphTo(在手机型号中,polymorphic relation)

您将在此处获得所有关系详细信息https://laravel.com/docs/5.6/eloquent-relationships

希望能给你一些启发

关于php - 如何使用 PHP/Laravel 设置模型并存储数据流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51433525/

相关文章:

mysql - SQLSTATE[HY000] [2002] 没有这样的文件或目录 (SQL : select count(*) as aggregate from `users` where `email` = ronit5rg@gmail. com)

php - 获取我的 laravel 网站的所有链接以获取站点地图

javascript - 在 Javascript 中使用单引号和双引号转义和取消转义字符串

php - 从确切日期到确切日期选择记录

mysql - 无论年份如何,如何检查日期是否在范围内

php - Laravel 迁移似乎无法在某些计算机上运行

php - SQL 查询错误

php - 在 PHP 中循环遍历数组

php - 一个 URL 中有两个单独的 ID?

python - LOAD DATA INFILE 没有加载我所有的数据