66

このメソッドを含む Run というモデルを取得しました。

public function getNameAttribute($name){
    if($name == 'Eendaags')
        return $this->race_edition->race->name;

    return $this->race_edition->race->name.' '.$name;
}

多くの実行が同じ名前を持ち、唯一の違いはレース名であるため、laravel管理者にこの設定が必要です。しかし、Web サイトの 1 か所で、変更せずに名前だけを取得する必要があります。これは可能ですか?

4

4 に答える 4

172

これが正しい方法です

// that skips mutators
$model->getOriginal('name');

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_getOriginal

編集: 注意してください!

Maksym Cierzniak がコメントで説明したように、ミューテーターgetOriginal()をスキップするだけでなく、オブジェクトがデータベースから読み取られた時点のフィールドの「元の」値も返します。したがって、モデルのプロパティを変更した場合、これは変更された値を返さず、元の値を返します。モデル クラス内から変更されていない値を取得するためのより一貫性のある信頼性の高い方法は、次のattributesようにプロパティから取得することです。

$this->attributes['name']

ただしattributes、これは保護されたプロパティであるため、モデル クラスの外部からは実行できないことに注意してください。その場合、使用できます

$model->getAttributes()['name']`

または、以下の彼のコメントからの Maksym のテクニック。

于 2013-09-16T08:43:22.333 に答える
3

Eloquent アクセサーとフォーム モデル バインディングで問題が発生しました。money_format で整数をフォーマットすると、値がフォーム番号入力フィールドに読み込まれなくなりました。

私が使用している回避策は、別の名前でアクセサーを作成することです。

public function getRevenueDollarsAttribute($value)
{
    return money_format('$%i', $this->revenue);
}

これにより、フォーム モデル バインディングに影響を与えずにアクセサーが提供されます。

于 2015-09-23T21:18:02.747 に答える