Laravel. $ fillable не работает в полиморфных отношениях [duplicate]

Это легко в Perl 5.10 или новее:

/(?(DEFINE)
   (?<address>         (?&mailbox) | (?&group))
   (?<mailbox>         (?&name_addr) | (?&addr_spec))
   (?<name_addr>       (?&display_name)? (?&angle_addr))
   (?<angle_addr>      (?&CFWS)? < (?&addr_spec) > (?&CFWS)?)
   (?<group>           (?&display_name) : (?:(?&mailbox_list) | (?&CFWS))? ;
                                          (?&CFWS)?)
   (?<display_name>    (?&phrase))
   (?<mailbox_list>    (?&mailbox) (?: , (?&mailbox))*)

   (?<addr_spec>       (?&local_part) \@ (?&domain))
   (?<local_part>      (?&dot_atom) | (?&quoted_string))
   (?<domain>          (?&dot_atom) | (?&domain_literal))
   (?<domain_literal>  (?&CFWS)? \[ (?: (?&FWS)? (?&dcontent))* (?&FWS)?
                                 \] (?&CFWS)?)
   (?<dcontent>        (?&dtext) | (?&quoted_pair))
   (?<dtext>           (?&NO_WS_CTL) | [\x21-\x5a\x5e-\x7e])

   (?<atext>           (?&ALPHA) | (?&DIGIT) | [!#\$%&'*+-/=?^_`{|}~])
   (?<atom>            (?&CFWS)? (?&atext)+ (?&CFWS)?)
   (?<dot_atom>        (?&CFWS)? (?&dot_atom_text) (?&CFWS)?)
   (?<dot_atom_text>   (?&atext)+ (?: \. (?&atext)+)*)

   (?<text>            [\x01-\x09\x0b\x0c\x0e-\x7f])
   (?<quoted_pair>     \\ (?&text))

   (?<qtext>           (?&NO_WS_CTL) | [\x21\x23-\x5b\x5d-\x7e])
   (?<qcontent>        (?&qtext) | (?&quoted_pair))
   (?<quoted_string>   (?&CFWS)? (?&DQUOTE) (?:(?&FWS)? (?&qcontent))*
                        (?&FWS)? (?&DQUOTE) (?&CFWS)?)

   (?<word>            (?&atom) | (?&quoted_string))
   (?<phrase>          (?&word)+)

   # Folding white space
   (?<FWS>             (?: (?&WSP)* (?&CRLF))? (?&WSP)+)
   (?<ctext>           (?&NO_WS_CTL) | [\x21-\x27\x2a-\x5b\x5d-\x7e])
   (?<ccontent>        (?&ctext) | (?&quoted_pair) | (?&comment))
   (?<comment>         \( (?: (?&FWS)? (?&ccontent))* (?&FWS)? \) )
   (?<CFWS>            (?: (?&FWS)? (?&comment))*
                       (?: (?:(?&FWS)? (?&comment)) | (?&FWS)))

   # No whitespace control
   (?<NO_WS_CTL>       [\x01-\x08\x0b\x0c\x0e-\x1f\x7f])

   (?<ALPHA>           [A-Za-z])
   (?<DIGIT>           [0-9])
   (?<CRLF>            \x0d \x0a)
   (?<DQUOTE>          ")
   (?<WSP>             [\x20\x09])
 )

 (?&address)/x
1
задан Kousha 30 May 2014 в 01:08
поделиться

2 ответа

Изменить следующее:

->update(Input::all());

к этому (исключить _method из массива)

->update(Input::except('_method'));

Обновление:

Фактически следующее update вызывается из класса Illuminate\Database\Eloquent\Builder, который запускается методом _call класса Illuminate\Database\Eloquent\Relations (потому что вы вызываете update в отношении), и, следовательно, проверка $fillable не выполняется и вы можете использовать Input::except('_method'), как я ответил:

public function update(array $values)
{
    return $this->query->update($this->addUpdatedAtColumn($values));
}

Если вы прямо вызываете это на модели (не по отношению):

Positions::find($id)->update(Input::all());

Тогда этого не произойдет потому что проверка fillable будет выполняться внутри Model.php, потому что после Illuminate\Database\Eloquent\Model метода будет вызван метод Illuminate\Database\Eloquent\Model:

public function update(array $attributes = array())
{
    if ( ! $this->exists)
    {
        return $this->newQuery()->update($attributes);
    }

    return $this->fill($attributes)->save();
}
6
ответ дан The Alpha 27 August 2018 в 02:24
поделиться

записать родительский класс

class BaseModel extends Model

public static function getFillableAttribute(Model $model, $data){
    $array = $model->getFillable();
    $arr = [];
    foreach ($array as $item){
        if( isset($data["$item"])){
            $arr["$item"] = $data["$item"];
        }
    }
    return $arr;
}
0
ответ дан BeeChen 27 August 2018 в 02:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: