Laravel - Melhores práticas
Olá galera,
Faz tempo que não venho aqui perguntar nada rs...
Mas me surgiu uma dúvida cruel em relação a como receber os dados de um model.
Eu tenho uma tabela chamada VendorMaster a qual contém todos os meus vendedores, essa tabela se relacionada com uma tabela chamada division que se relaciona com uma chamada listing e por ai vai...
Ai eu tenho o seguinte código:
$resp = VendorMaster::all();
foreach($resp as $key=>$vendor){
$vendor->division;
foreach($vendor->division as $key=>$division) {
$division->listing;
foreach($division->listing as $key=>$listing){
$listing->building;
$listing->building->region;
$listing->building->city;
$listing->building->country;
$listing->building->style;
}
}
}
Bom o que esse código faz?
Ele pega todos os vendedores e faz um loop por seus objetos e coleta dado dos outros models
No caso 1 vendor tem muitas divisions e divisions tem muitos listings
Queria saber se eu fizer dessa forma eu vou tar fazendo um loop exagerado no meu banco (eu acredito que sim...)
Se seria ou não melhor criar uma função no model vendor com joins para fazer exatamente a mesma coisa.
Eu acredito que se eu fizer 1 função única na qual eu faça vendor->getAllDependets ou algo do genero... se vai ser mais rápido e confiável para meu código do que fazer esse loop assim como eu fiz.
Todas as sugestões são bem vindas...
To querendo otimizar as transações para que isso não vire a festa do pau oco nem que leve 3 anos pro banco buscar tudo.
Detalhe eu sei que o aproche atual provavelmente não é o melhor... mas ele funciona rs.
Resultado final desejado é algo assim:
"vendorMasterID": 714,
"vendorMasterName": "asdahsiduasdagd",
"vendorMasterShortName": "asdahsiduasdagd",
"vendorMasterCode": "ASG",
"vendorMasterPosition": 100,
"vendorMasterActive": 1,
"vendorMasterCreated": "2016-12-20 19:38:59",
"vendorMasterAPICode": null,
"division": [{
"vendorDivisionID": 1230,
"vendorDivisionName": "lalalla",
"vendorDivisionVendorID": 714,
"vendorDivisionTypeID": 1,
"vendorDivisionSetPrice": 1,
"vendorDivisionCommission": 0,
"vendorDivisionSetAvail": 0,
"vendorDivisionSetMLOS": 0,
"vendorDivisionSetCustomMLOS": 0,
"vendorDivisionFRS": 0,
"vendorDivisionCurrency": "",
"vendorDivisionNotifyType": "S",
"vendorDivisionEmail": "",
"vendorDivisionFax": "",
"vendorDivisionFaxAlt": "",
"vendorDivisionRateCopy": 0,
"vendorDivisionHideExtranet": 0,
"special_best_daily_rate": 1,
"special_compound_rates": 0,
"set_specials": 0,
"set_charges": 0,
"vendorDivisionActive": 1,
"vendorDivisionCreated": "2016-12-20 12:13:30",
"vendorDivisionSetSimpleRates": "N",
"vendorDivisionBookingURL": null,
"vendorDivisionBookingPhone": null,
"listing": [{
"vendorListingID": 3,
"vendorListingBuildingID": 1026,
"vendorListingUnitTypeID": 1,
"vendorListingDivisionID": 1230,
"vendorListingCheckinID": 7,
"vendorListingGroupID": 0,
"vendorListingExtra": "sdasda",
"vendorListingExtra2": "",
"vendorListingDesc": "dashiduhasio",
"vendorListingOcc": 2,
"vendorListingMaxOcc": 4,
"vendorListingBeds": "King Bed, Queen Bed",
"vendorListingBath": 2,
"vendorListingSqft": 100,
"vendorListingUnit": 0,
"vendorListingStatus": -1,
"vendorListingDecre": 0,
"vendorListingFRS": "",
"vendorListingUnitNum": "",
"vendorListingBlockID": 0,
"vendorListingBlockDays": 0,
"vendorListingPackage": 0,
"vendorListingSecretSaver": 0,
"vendorListingMapListingID": 0,
"vendorListingPrepaid": 0,
"vendorListingActive": 1,
"vendorListingCreated": "2016-12-20 22:38:58",
"vendorListingHousekeepingStatus": 1,
"building": {
"buildingID": 1026,
"buildingName": "El Salvador",
"buildingDesc": "",
"buildingTypeID": 1,
"buildingAddress": "Test",
"buildingRegionID": 201,
"buildingCityID": "91",
"buildingStateID": "664",
"buildingCountryID": "38",
"buildingZipCode": "V5N 2P9",
"buildingCreated": "2016-12-20 20:04:29",
"region": {
"regionID": 201,
"regionName": "Downtown",
"regionAbr": "",
"regionDesc": "",
"regionCityID": 91,
"regionCreated": "2016-12-01 00:10:18"
},
"city": {
"cityID": 91,
"cityStateID": 664,
"cityName": "Vancouver",
"cityDesc": "",
"cityCreatedBy": 0,
"cityCreated": "2016-12-01 00:17:08"
},
"country": {
"countryID": 38,
"countryAbr": "CA",
"countryName": "Canada",
"countryCurrencyID": 0
},
"style": {
"buildingTypeD": 1,
"buildingTypeName": "Hotel",
"buildingTypeActive": 1
}
}
}]
}]
Abraços
Discussão (3)
Carregando comentários...