php artisan make:model Book -mБудет создано 2 файла:
- app/Book.php
- database/migrations/YYYY_MM_DD_XXXXXXX_create_books_table.php
Чтобы иметь возможность массово присваивать атрибуты модели, нужно указать их в файле модели, к примеру app/Product.php:
class Product extends Model
{
protected $fillable = ['name', 'price'];
}php artisan make:controller ProductController --resourceБудет создан файл: app/Http/Controllers/ProductController.php
php artisan route:listВ файл routes/web.php добавить:
Route::resource('products', 'ProductController');При этом подразумевается, что в контроллере будут определены экшены ресурса (index, create, store, show, edit, update, destroy).
php artisan make:migration create_links_tableБудет создан файл миграции в database/migrations:
// ...
Schema::create('links', function (Blueprint $table) {
$table->increments('id');
$table->integer('weight');
$table->string('title');
$table->string('url')->unique();
$table->text('description');
// Эта команда создаст в базе поля created_at, updated_at
$table->timestamps();
});php artisan migratephp artisan migrate:rollbackДобавьте в database/factories/ModelFactory.php:
$factory->define(App\Link::class, function (Faker\Generator $faker) {
return [
'title' => $faker->name,
'url' => $faker->url,
'description' => $faker->paragraph,
];
});php artisan make:seeder LinksTableSeederБудет создан файл: database/seeds/LinksTableSeeder.php
Добавим туда команду по созданию 10 тестовых записей. При этом будет использоваться фабрика, определенная в database/factories/ModelFactory.php для класса App\Link:
// ...
public function run()
{
factory(App\Link::class, 10)->create();
}Чтобы использовать класс LinksTableSeeder, его нужно вызвать в файле database/seeds/DatabaseSeeder.php, отвечающем за наполнение всех таблиц тестовыми данными:
// ...
public function run()
{
$this->call(LinksTableSeeder::class);
}php artisan migrate --seedВ laravel 5.5 для работы с ассетами используется mix, который заменяет использовавшийся ранее elixir. Инструмент mix основывается на более универсальном webpack, тогда как elixir опирался на gulp.
- Запустить все mix-команды
npm run dev- Запустить все mix-команды и минифицировать вывод
npm run production- Запустить отслеживание изменений css, js файлов и их автоматическую компиляцию
npm run watchНастройки mix расположены в файле webpack.mix.js:
// ...
mix
.js('resources/assets/js/app.js', 'public/js')
.sass('resources/assets/sass/app.scss', 'public/css');При компиляции:
- файл
resources/assets/js/app.jsбудет преобразован вpublic/js/app.js - файл
resources/assets/sass/app.scssбудет преобразован вpublic/css/app.css
Если нужно будет добавить новые файлы стилей, их можно поместить, к примеру, в resources/assets/sass/products.scss. Чтобы содержимое этого файла появилось в финальном файле app.css, нужно импортировать этот файл в resources/assets/sass/app.scss:
@import "products";- Найти запись по id
$product = Product::find(5);- Связанные модели
$product->categories- Число связанных моделей
$product->categories->count(); // 6- Проверить существование связанных моделей
$product->categories()->exists(); // true | false- Добавить связанную модель
$category = Category::find(5);
$product->categories()->attach($category);- Удалить связанные модели
$product->categories()->detach(); // 0 | 1Валидация параметров, переданных с формы, идет в методе контроллера. Рассмотрим метод store контроллера app/Http/Controllers/ProductController.php:
// ...
public function store(Request $request) {
// Валидируем параметры, пришедшие с формы.
// Если они окажутся ошибочными, остальная часть кода этого метода не будет выполнена
$params = $request->validate([
'name' => 'required',
'price' => 'required|numeric'
]);
$product = Product::create($params);
}Schema::table('posts', function(Blueprint $table)) {
$table->foreign('user_id')->references('id')->on('users');
});На колонке user_id таблицы posts будет создан внешний ключ на колонку id таблицы users.
Важно: Колонки должны иметь одинаковый формат, иначе внешний ключ не будет создан. В общем случае колонка user_id должна быть создана такой командой (обратите внимание на unsigned):
// ...
$table->integer('user_id')->unsigned();В laravel, чтобы отобразить на странице значение переменной, можно использовать функции:
dump($someVar); // выполнение скипта продолжится
dd($someVar); // выполнение скрипта будет прервано