Размер шрифта
-
+

Laravel – гайд по выживанию - стр. 5


Тем не менее, препятствие все еще существует.


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



Route::get('/admin/zombies/create', function(){

echo '




';

});


При посещении этого маршрута в браузере (site.com/admin/zombies/create) отображается простая форма.




При отправке формы данные публикуются в файл

site.com/admin/zombies/create POST-маршрут, который должен выглядеть следующим образом:



Route::post('/admin/zombies/create', function () {

// создаем нового зомби

});


Добавив следующую реализацию:



use App\Models\Zombie;

use Illuminate\Http\Request;


Route::post('/admin/zombies/create', function(Request

$request){


// instantiate a new zombie

$zombie = new Zombie();

$zombie->name = $request->name;

$zombie->strength = $request->strength;

$zombie->health = $request->health;

$zombie->save();


echo 'Zombie Created';

});


И затем отправить форму со следующими данными:


Имя: Johnny Bullet Holes

Strength: Сильный

Здоровье: 70


Вы получите сообщение 'Zombie Created'. При просмотре нашей базы данных обнаруживается новая запись.





Впечатляет, не правда ли? Однако вместо того, чтобы вручную указывать имя, силу и здоровье, Laravel позволяет использовать более лаконичный подход:



use App\Zombie;

use Illuminate\Http\Request;


Route::post('/admin/zombies/create', function(Request

$request){


// instantiate a new zombie using posted data

$zombie = Zombie::create($request->all());


echo 'Zombie Created';

});


При попытке использовать этот маршрут может возникнуть ошибка 'MassAssignmentException'. Это означает, что мы пытаемся выполнить массовое назначение классу "Зомби", не указав допустимые поля. В Laravel такая защита предусмотрена по умолчанию.


Чтобы разрешить массовое присвоение для атрибутов имени, силы и здоровья в нашем классе Zombie, просто добавьте:


protected $fillable = ['name', 'strength', 'health'];


Переделанный класс выглядит следующим образом:


use Illuminate\Database\Eloquent\Model; class Zombie extends Model {

protected $table = 'zombies';

protected $fillable = ['name', 'strength', 'health'];

}


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


Предположим, что мы создали еще одного зомби:


Имя: Ted Manwalking

Strength: Слабый

Здоровье: 90


Тогда в нашей базе данных появятся следующие записи:





Eloquent значительно облегчает процессы создания, чтения, обновления и удаления записей в базе данных. Далее мы рассмотрим отношения, облегчающие связывание данных между таблицами базы данных.



4. Модельные отношения



Разработчик-зомби борется с отношениями, но разработчик Laravel превосходно пользуется преимуществами отношений в базе данных.


Зомби не хватает интеллекта для создания значимых отношений –связей между таблицами. В отличие от них, класс Eloquent в Laravel позволяет без особых усилий устанавливать и использовать отношения между таблицами.

Страница 5