2017-02-21 61 views
4

Я использую красноречивые модели в Laravel 5.4 В документации, я вижу:Laravel/Eloquent советует переопределить свойство свойства?

Вы можете также использовать метод создания, чтобы сохранить новую модель в одной линии. Экземпляр вставленной модели будет возвращен вам из метода . Тем не менее, перед этим вам нужно будет указать либо нулевой атрибут , либо все остальные модели Eloquent для защиты от массового присвоения по умолчанию.

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Flight extends Model 
{ 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = ['name']; 
} 

Однако $ заполняемых свойство уже определено в черта, используемой всеми моделями:

trait GuardsAttributes 
{ 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = []; 

... 

документация PHP ясно о TRAITS свойств:

Если trait определяет свойство, тогда класс не может определить свойство с тем же именем, в противном случае выдается ошибка. Это E_STRICT, если определение класса совместимо (та же видимость и начальное значение) или фатальная ошибка в противном случае.

Является ли документация Laravel неправильной в отношении реализации adivsed?

+1

Неправильно. У вас есть класс 'A', и вы используете черту внутри этого класса. Trait = копирование с помощью языка. Класс 'A' не может содержать' protected $ fillable' - и это не так, потому что ваш класс 'A'' Illuminate \ Database \ Eloquent \ Model'. До сих пор так хорошо, но теперь вы расширяете «Модель», и вы можете переопределить свойство «protected $ fillable». В правилах наследования это допускается. Ваш вопрос действителен, но так же есть и выдержки из документации. – Mjh

ответ

4

Вы не можете переопределить свойства свойств в том же классе, что и в документации PHP.

Laravel, однако, просит вас переопределить это в дочернем классе (ваш класс модели, который расширяет класс модели Eloquent, и этот признак включен в класс модели Eloquent, а не в класс модели). Это совершенно правильная вещь!