【问题标题】:laravel error assigning collection to javascript variablelaravel错误将集合分配给javascript变量
【发布时间】:2018-07-06 19:37:39
【问题描述】:

在来自存储库的控制器中使用相同的抽象方法 all() 包括:

    $clients = $this->clients->all();
    $substrates = $this->substrates->all();
    return view('jobs.create', compact('substrates', 'clients')) ;

在create.blade.php中

    let substrates = {!! $substrates !!}
    let clients = {!! $clients !!}

我可以在 html 中访问嵌入式 php 中的集合并且工作正常,但是当我将它分配给 javascript 变量时;虽然 $clients 没有问题可以正常工作,但我得到以下信息:

错误异常 (E_ERROR) Method Illuminate\Database\Eloquent\Collection::__toString() 必须返回一个字符串值(查看:/home/vagrant/code/resources/views/jobs/create.blade.php)

【问题讨论】:

  • 对不起,伙计们,我想我应该问的问题是为什么我似乎无法将数组和集合都更改为 json,使用 json_encode() 和 toJson() 相同的结果“假”

标签: javascript php laravel vue.js blade


【解决方案1】:

我认为您可以同时使用 toJson() 方法或 @json Blade 指令:

let substrates = @json($substrates);
let clients = @json($clients);

你可以在渲染 Json 下找到一些文档 https://laravel.com/docs/5.5/blade#displaying-data

【讨论】:

    【解决方案2】:

    使用toJson() 方法:

    let substrates = `{!! $substrates->toJson() !!}`
    let clients = `{!! $clients->toJson() !!}`
    

    【讨论】:

    • 谢谢我试过了,我得到 'create:101 Uncaught ReferenceError: substrates is not defined' 我正在使用 vue.js,但这一切都在 vue 实例之外。
    • $substrates = $this->substrates->all()->toArray(); $temp = json_encode($substrates); dd($temp, json_last_error(), json_last_error_msg(), $substrates);这是 dd() 输出:false 8 "不支持类型"
    【解决方案3】:

    您可以为此使用json_encode

    <script>    
      let substrates = {!! json_encode($substrates->toArray()) !!};
      let clients = {!! json_encode($clients->toArray()) !!};
    </script>
    

    希望这会有所帮助。

    【讨论】:

    • 我尝试了所有选项,包括你的选项,当我 console.log(substrates) 我没有定义。尽管客户端工作得很好,我可以同时解析 php/html 中的 $clients 和 $substrates。
    【解决方案4】:

    问题是我在底物模型中有一个二进制字段,并且作为集合的一部分;正在获取所有()。

    【讨论】:

      猜你喜欢
      • 2022-06-14
      • 2018-10-02
      • 2023-03-26
      • 1970-01-01
      • 2013-09-04
      • 2018-01-11
      • 2021-08-04
      • 2014-04-23
      • 2014-06-04
      相关资源
      最近更新 更多