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 migrate
php 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); // выполнение скрипта будет прервано