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

#laravel #laravel-5 #mutators

#laravel #laravel-5 #мутаторы

Вопрос:

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

AppHttpUtilitiesBillingHelper.php

Логотип GitHub

views/billing/create.blade.php

Логотип GitHub

views/billing/edit.blade.php

Логотип GitHub

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

Логотип GitHub

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

Должен ли я использовать мутаторы?

Логотип GitHub

Проблема

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

Логотип GitHub

Логотип GitHub

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

Ответ №1:

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

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

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

Комментарии:

1. Или, чтобы улучшить его, добавьте old(‘currency’, $client-> currency) вместо null .

2. Спасибо, Мауро, но все равно не работает, если я использую Accesor для изменения кода во флагах и символах. Есть ли альтернатива accesor? : D .. или лучший способ его использования.

3. Это не альтернатива средствам доступа, но… Ваши данные будут статическими или вы собираетесь изменить их, выполнив запрос к БД? Потому что вы могли бы просто создать другой файл в папке config и получить его как config (‘file_name.currency’) Если вам нужно имя валюты: config(‘file_name.currency.eur’)

4. Спасибо, Мауро, я пробовал также с view composers. Я получил ту же ошибку … — «Ваши данные будут статическими или вы собираетесь их изменить» Я хочу заполнить поля выбора из массива. Я не думаю, что мне нужно создавать отдельную таблицу для каждого поля выбора, которое я использую. После отправки формы я хочу получить выбранные значения из базы данных и отобразить их на моей индексной странице в моей таблице. Мне также нужно изменить некоторые значения с помощью некоторых символов и значков (языковые флаги и т. Д.) На моей индексной странице (не в базе данных)

5. До сих пор я пытался сделать это с помощью средств доступа, но страница редактирования (привязка модели) больше не работает. Я больше не получаю выбранные значения.

Ответ №2:

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

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

Вот почему:

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

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

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

Ответ №3:

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