Laravel - привязка модели не работает, когда я использую аксессуары

Я хочу заполнить поле выбора из контейнера Laravel IoC.

App\Http\Utilities\BillingHelper.php

Логотип GitHub

просмотры/биллинг/create.blade.php

Логотип GitHub

просмотры/биллинг/edit.blade.php

Логотип GitHub

Создайте таблицу:

Логотип GitHub

Теперь вместо значения я хочу отобразить некоторые флаги и символы валюты.

Стоит ли использовать мутаторы?

Логотип GitHub

Проблема

Если я использую мутаторы, когда я открываю страницу редактирования, я всегда вижу первое выбранное значение из BillingHelper вместо выбранного.

Логотип GitHub Логотип GitHub

Любая помощь? Спасибо.


person confm    schedule 06.10.2016    source источник


Ответы (3)


Я знаю, что это должен быть комментарий, но у меня нет репутации.

Что если на странице редактирования вы замените null в Form::select на $client->language и $client->currency.

Я знаю, что вы связываете значения с помощью Form::Model. Но стоит попробовать.

person Mauro Baptista    schedule 07.10.2016
comment
Или, чтобы улучшить его, добавьте old('currency', $client-›currency) вместо null. - person Mauro Baptista; 07.10.2016
comment
Спасибо, Мауро, но все еще не работает, если я использую Accesor для изменения кода во флагах и символах. Любая альтернатива аксессуара? : D .. или лучший способ его использовать. - person confm; 07.10.2016
comment
Это не альтернатива Accessor, но... Ваши данные будут статическими или вы собираетесь изменить их, выполнив запрос к БД? Потому что вы можете просто создать еще один файл в папке конфигурации и получить его как config('имя_файла.currency'). Если вам нужно название валюты: config('имя_файла.currency.eur') - person Mauro Baptista; 07.10.2016
comment
Спасибо, Мауро, я пробовал также с точки зрения композиторов. У меня та же ошибка... - Ваши данные будут статическими или вы собираетесь их изменить. Я хочу заполнить поля выбора из массива. Я не думаю, что мне нужно создавать отдельную таблицу для каждого используемого поля выбора. После отправки формы я хочу получить выбранные значения из базы данных и отобразить их на моей индексной странице в моей таблице. Мне также нужно изменить некоторые значения с некоторыми символами и значками (языковые флаги и т. д.) на моей индексной странице (не в базе данных) - person confm; 11.10.2016
comment
До сих пор я пытался сделать это с помощью средств доступа, но страница редактирования (привязка модели) больше не работает. Я больше не получаю выбранные значения. - person confm; 11.10.2016

При использовании мутаторов сопоставление больше не происходит. Вам придется использовать соответствующий статический массив в соответствии с возвращаемыми значениями. (флаги)

Вы можете заставить это работать, если сделаете мутатор и для сохранения данных и снова упростите до ['it', 'en', 'lv'], иначе ваши сохраненные данные будут отличаться и первоначальный мутатор не будет работать второй время. Вы все еще можете сделать одноразовый тест.

Вот почему:

Ваша привязка формы использует $bill-›language для извлечения фактических сохраненных данных и сравнения их со значениями в вашем статическом массиве $bill::lang. Если совпадений не найдено, всегда будет выбрано первое значение.

Можете ли вы предоставить определение полей валюты и языка в миграции для счета?

Также извлеките свои значения из базы данных счетов и вставьте их сюда для языка и валюты. Они должны быть в определенных статических наборах.

person Codrut TG    schedule 11.10.2016

Laravel имеет возможность пропустить аксессор/мутатор, используя $model->getOriginal('data_field'). "getOriginal()" получает исходные значения атрибутов модели.

person thomas jackson    schedule 09.10.2018