2016-02-19 2 views
1

В некоторых пакетах на основе laravel есть ссылка на свойства, которые не объявлены, но являются именем столбца таблицы этой модели.laravel: доступ к объекту без объявления его

билеты стола:

id 
    name 
    content 

и билеты модели:

class Ticket extends Model { 

//there is no "protected $content;" defined inside model 
$this->content = foo; 
...... 

} 

имеет свойство модели создается динамически на основе модели столбцов таблицы?

+1

Да, красноречивый Laravel соотносит имена столбцов атрибутов модели. Это типичное поведение ORM (Object Relational Mapper). см.: http://www.webgeekly.com/tutorials/php/the-benefits-of-using-object-relational-mapping-in-php/ – Mysteryos

ответ

2

Вам необходимо установить $ guarded или $ fillable https://laravel.com/docs/5.1/eloquent#mass-assignment в вашей модели. Например:

class Ticket extends model { 
    protected $guarded =[]; 
} 

Это позволит вам получить доступ ко всем столбцам таблицы и обновить их.

class Ticket extends model { 
    protected $fillable = ['name', 'content']; 
} 

В этом давайте вы столбцы доступа name и content и udpate только им.

+0

thanks.so после установки $ guarded или $ fillable можно сделать : '$ this-> content = foo', note im not ask about: '$ ticket-> content' – alex

+0

В вашем примере моделиFunction() {$ this-> foo = 'bar'; $ This-> сохранить(); } –

0

Атрибуты модели неявно объявляются в зависимости от столбцов таблицы сопоставленной базы данных.

Youcan явно объявить соответствующую таблицу

protected $table = 'tablename'; 
Смежные вопросы