Каков наилучший способ заполнения модели значением, возвращаемым флажком, который необходимо сохранить в базе данных MySQL? - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть свойство модели с именем 'boolean_property'. (Модель, приведенная ниже, является, конечно, примером. Моя реальная модель имеет гораздо больше свойств.)

<?php

class MyModel extends Model
{   
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'boolean_property' => 'boolean',
    ];
}

Значение этого свойства определяется пользователем в форме с флажком.

<input type="checkbox" class="form-check-input" name='boolean_property' {{ !$mymodel->boolean_property?: 'checked' }}>

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

public function update(Request $request, MyModel $mymodel)
{
    $mymodel->fill($request->input());

    $mymodel->save();
    return redirect()->route('mymodels.edit', ['mymodel' => $mymodel]);
}

Однако, так как значение моего 'boolean_property' теперь 'включено' (= строка) MySQL не очень счастлив, когда я пытаюсь сохранить его как логическое значение в моей базе данных ...

Я могу решить эту проблему следующим образом:

public function update(Request $request, MyModel $mymodel)
{
    $mymodel->fill($request->input());
    $mymodel->done = $request->input('boolean_property') ? 1 : 0;
    $mymodel->save();
    return redirect()->route('mymodels.edit', ['mymodel' => $mymodel]);
}

Но это решение не очень элегантно, так как я должен отслеживать каждую часть своего кода, где я каждый раз заполняю свою модель значением флажка Я хочу добавить, изменить или удалить логическое свойство.

Вероятно, есть лучший способ сделать это, изменив что-то в классе моей модели, но я не могу найти, как это сделать. Вот почему я спрашиваю вас, надеясь, что кто-то, более привыкший к Laravel, чем я, может помочь мне с этим.

Подводя итог, мой вопрос: Как лучше всего справиться с Laravel свойство, определяемое флажком, которое я хочу использовать в качестве логического значения во всем моем коде и иметь возможность сохранить его как логическое значение (= tinyint) в моей (MySQL) базе данных?

1 Ответ

0 голосов
/ 20 февраля 2020

Вы можете использовать определенный здесь мутатор https://laravel.com/docs/master/eloquent-mutators#defining -a-mutator

Это будет выглядеть так

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * Set the user's news letter preference.
     *
     * @param  string  $value
     * @return void
     */
    public function setNewsletterAttribute($value)
    {
        $this->attributes['wants_newsletter'] = isset($value);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...