Laravel模型获取方法解码JSON

时间:2017-06-20 01:41:20

标签: laravel laravel-5

下面是我存储在我的数据库中的内容但是当我在我的模型中使用我的get方法时,我必须在格式化数据时使用json_decode两次为什么会发生这种情况我可以让它只是以某种方式使用它。

json完全在db:

"[{\"id\":\"1\",\"country\":\"New Zealand\",\"shipping_rate\":\"1\"},{\"id\":\"2\",\"country\":\"Australia\",\"shipping_rate\":\"2\"}]"

模型获取方法:

public function getshippingAttribute()
{
    return $this->attributes['shipping'] ? json_decode(json_decode($this->attributes['shipping'])) : [];
}

2 个答案:

答案 0 :(得分:1)

问题在您的问题中不够明确,但Laravel提供了内置属性转换机制(自v-5.1起)。在这种情况下,在您的模型中,只需声明library(shiny) library(shinydashboard) ui <- dashboardPage( dashboardHeader(), dashboardSidebar( sidebarMenu(id = "sidebarmenu", menuItem("A", tabName = "a", icon = icon("group", lib="font-awesome")), menuItem("B", tabName = "b", icon = icon("check-circle", lib = "font-awesome")), conditionalPanel("input.sidebarmenu == 'a'", uiOutput('A_panel') ), conditionalPanel("input.sidebarmenu == 'b'", uiOutput('B_panel') ) ), sliderInput("x", "Outside of menu", 1, 100, 50) ), dashboardBody() ) server <- function(input, output) { RV <- reactiveValues(b_ui_flg=FALSE) output$A_panel <- renderUI({ if(input$sidebarmenu != "a") return() cat('Inside A Panel \n') sliderInput("b", "Under A", 1, 100, 50) }) observeEvent(input$sidebarmenu, { if(input$sidebarmenu != "b") return() if (RV$b_ui_flg) return() RV$b_ui_flg <- TRUE cat('Inside B Panel \n') output$B_panel <- renderUI({ sliderInput("b", "Under B", 1, 100, 50) }) }) } shinyApp(ui, server) 属性,例如:

$casts

由于上面给出了protected $casts = [ 'shipping' => 'array', // more ... ]; 属性,无论何时编写(创建/更新)模型,都不需要显式使用$casts将数组转换为{{1} } {},json_encode将为您执行此操作,当您检索模型(单个/集合)时,json属性将自动转换回Laravel,因此您不需要使用shipping来处理该属性。

关于响应,如果您不手动将其转换为array(返回json_decode时),也将由laravel处理。这可能会解决您的问题。

答案 1 :(得分:-1)

尝试返回json响应

public function getshippingAttribute()
{
    return response()->json($this->attributes['shipping'])
}