【问题标题】:Laravel - Model binding not working when I use accessorsLaravel - 当我使用访问器时模型绑定不起作用
【发布时间】:2016-10-06 21:06:17
【问题描述】:

我想从 Laravel IoC 容器中填充我的选择框。

App\Http\Utilities\BillingHelper.php

views/billing/create.blade.php

views/billing/edit.blade.php

创建表:

现在,我想显示一些标志和货币符号,而不是值。

我应该使用突变器吗?

问题

如果我使用 mutators,当我打开编辑页面时,我总是看到从 BillingHelper 中选择的第一个值,而不是选择的值。

有什么帮助吗?谢谢。

【问题讨论】:

    标签: laravel laravel-5 mutators


    【解决方案1】:

    我知道应该是评论,但我没有名声。

    如果在编辑页面上将 Form::select 上的 null 替换为 $client->language 和 $client->currency。

    我知道您使用 Form::Model 绑定值。不过值得一试。

    【讨论】:

    • 或者,为了改进它,添加 old('currency', $client->currency) 而不是 null。
    • 谢谢,Mauro,但如果我使用 Accesor 更改标志和符号中的代码,仍然无法正常工作。有什么替代品吗? :D.. 或更好的使用方式。
    • 这不是访问器的替代品,但是...您的数据将是静态的,或者您打算通过数据库查询对其进行更改?因为,您可以在 config 文件夹中创建另一个文件,并将其检索为 config('file_name.currency') 如果您想要货币名称: config('file_name.currency.eur')
    • 谢谢,Mauro,我也尝试过查看作曲家。我遇到了同样的错误...-“您的数据将是静态的,或者您将要更改它”我想从数组中填充我的选择框。我认为我不需要为我使用的每个选择框创建一个单独的表。提交表单后,我想从数据库中获取选定的值,并将它们显示在我的索引页面上,在我的表中。我还需要在我的索引页面(不在数据库中)上用一些符号和图标(语言标志等)更改一些值
    • 到目前为止,我已经尝试使用访问器执行此操作,但编辑页面(模型绑定)不再起作用。我不再获得选定的值。
    【解决方案2】:

    当您使用 mutators 时,匹配将不再发生。您必须根据要返回的值使用匹配的静态数组。 (旗帜)

    如果你创建一个用于保存数据的 mutator 并再次简化为 ['it', 'en', 'lv'],你可以让它工作,否则你保存的数据会有所不同,初始 mutator 不会第二次工作。您仍然可以进行一次性测试。

    这就是原因:

    您的表单绑定正在使用 $bill->language 检索实际存储的数据,并将其与 $bill::lang 静态数组中的值进行比较。如果未找到匹配项,则始终选择第一个值。

    您能否提供账单迁移中的货币和语言字段定义?

    还可以从您的账单数据库中检索您的值并将它们粘贴到此处以获取语言和货币。它们必须在定义的静态集中。

    【讨论】:

      【解决方案3】:

      Laravel 有一种跳过访问器/修改器的方法,方法是使用 $model->getOriginal('data_field')。 “getOriginal()”获取模型的原始属性值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-31
        • 2015-04-24
        相关资源
        最近更新 更多