Laravel One To Many Relationship Tutorial — ведущая тема сегодняшнего дня. Отношение «один ко многим» определяется как единая модель, которая владеет несколькими моделями. Например, у человека бесконечное количество мобильных номеров или у сообщения в блоге есть несколько комментариев. Мы можем установить отношения один ко многим , определив функцию в модели. Вы можете перейти по этой ссылке Laravel One To One Eloquent Relationships, чтобы понять отношения.
Phpnamespace App; используйте Illuminate Database Eloquent Model; class Post extends Model {/** * Получить комментарии к сообщению в блоге. */public function comments () {return $ this-> hasMany ('Приложение Комментарий'); }}
В приведенном выше примере сообщение в блоге содержит несколько комментариев. Таким образом, мы можем определить функцию как комментарии, а также связать ее с hasMany (). Eloquent автоматически определит правильный столбец внешнего ключа в модели Comment
. По соглашению, Eloquent берет имя «змеиный случай» модели-владельца и добавляет к нему суффикс. _id
Таким образом, в этом примере Eloquent предполагает, что Внешний ключ в модели Comment
равен post_id
.
Когда связь определена, мы можем получить доступ к коллекции комментариев, открыв свойство comments
.
php $ comments = App Post :: find (1) -> comments; foreach ($ comments as $ comment) {//}
Взаимосвязь один-ко-многим в Laravel с примером.
Мы изучим эту взаимосвязь на следующем примере.
- Модель сотрудника
- Модель транзакции
У сотрудника несколько транзакций. Таким образом, мы можем определить отношения как Один ко многим. Сначала мы установим проект Laravel , а затем создадим две таблицы. Кроме того, мы разработаем модели и контроллеры, а затем свяжем модели друг с другом.
Шаг 1. Настройте Laravel.
Установите Laravel с помощью следующей команды.
composer create-project laravel/laravel --prefer-dist OtM
Теперь настройте базу данных в файле .env .
Кроме того, мы создадим внутри одну модель, схему и файл контроллера. наш проект.
php artisan make: controller EmployeeControllerphp artisan make: model Employee -m
Здесь мы увидим, что внутри проекта создано три файла.
После определения схемы файл миграции выглядит следующим образом.
phpuse Illuminate Support Facades Schema; используйте Illuminate Database Schema Blueprint; используйте Illuminate Database Migrations Migration; класс CreateEmployeesTable расширяет Migration {/** * Запуск миграции. * * @return void */public function up () {Schema :: create ('сотрудники', function (Blueprint $ table) {$ table-> increments ('id'); $ table-> string ('employee_name') ; $ table-> integer ('количество'); $ table-> timestamps ();}); }/** * Отменить миграции. * * @return void */public function down () {Schema :: dropIfExists ('сотрудники'); }}
Теперь запустите эту миграцию с помощью следующей команды.
php artisan migrate
Создайте файл представления для ввода сведений сотрудника. Итак, перейдите в resources >> views и внутри этой папки создайте один файл представления с именем
Добавить сведения о сотруднике{{csrf_field ()}}
Теперь добавьте маршруты в файле web.php .
Route :: get ('employee', 'Employe eController @ create ') -> name (' employee.create '); Route :: post (' employee ',' EmployeeController @ store ') -> name (' employee.store ');
Кроме того, обновите маршрут в атрибуте действия файла createEmployee.blade.php .
Теперь закодируйте две функции EmployeeController.php .
phpnamespace App Http Controllers; используйте Illuminate Http Request; используйте App Employee; класс EmployeeController расширяет контроллер {общедоступная функция create () {return view ('createEmployee'); } публичное хранилище функций (Request $ request) {$ employee = new Employee; $ employee-> employee_name = $ request-> get ('имя_работника'); $ employee-> amount = $ request-> get ('employee_salary'); $ employee-> save (); вернуть «Успех»; }}
Он сохранит данные о сотрудниках в базе данных..
Шаг 2. Создайте модель транзакции и контроллер.
Перейдите в свой терминал и введите следующую команду.
php artisan make: model Transaction -m
Теперь нам нужно определить схему для модели.
Schema :: create ('transaction ', функция (Blueprint $ table) {$ table-> приращения (' id '); $ table-> integer (' employee_id '); $ table-> integer (' transaction_amount '); $ table-> timestamps (); });
Нажмите следующую команду.
php artisan migrate
Теперь мы запишем транзакции Таблица. Итак, перейдите в терминал и нажмите следующую команду.
php artisan make: seeder TransactionTableSeeder
Хорошо, теперь нам нужно написать несколько запросов. для заполнения базы данных. Мы также можем использовать фабрику моделей для генерации данных, но пока мы используем только построитель запросов к БД для ввода некоторых данных. Пожалуйста, убедитесь; у вас есть как минимум три строки Employee в таблице сотрудника.
phpuse Illuminate Database Seeder; class TransactionsTableSeeder extends Seeder {/** * Запустите начальные числа базы данных. * * @return void */public function run () { DB :: table ('transaction') -> insert (['employee_id' => 1, 'transaction_amount' => 34000, 'created_at' => NOW () , 'updated_at' => СЕЙЧАС ()]); DB :: table ('transaction') -> insert (['employee_id' => 1, 'transaction_amount' => 7000, 'created_at' => NOW (), 'updated_at' => NOW ()]); DB :: table ('transaction') -> insert (['employee_id' => 2, 'transaction_amount' => 92000, 'created_at' => NOW (), 'updated_at' => NOW ()]); DB :: table ('transaction') -> insert (['employee_id' => 2, 'transaction_amount' => 54000, 'created_at' => NOW (), 'updated_at' => NOW ()]); DB :: table ('transaction') -> insert (['employee_id' => 3, 'transaction_amount' => 52000, 'created_at' => NOW (), 'updated_at' => NOW ()]); }}
Нам нужно запустить этот файл. Итак, перейдите к файлу DatabaseSeeder.php внутри папки database >> seed .
Phpuse Illuminate Database Seeder; класс DatabaseSeeder расширяет Seeder {/** * Запустить начальные числа базы данных. * * @return void */public function run () {$ this-> call (TransactionsTableSeeder :: class); }}
Также нам нужно выгрузить класс автозагрузки с помощью следующей команды.
composer dump-autoload
Затем нажмите следующая команда.
php artisan db: seed
Заполняет данные. Теперь у нас есть две таблицы, в каждой из которых есть данные. Одна таблица — это «Сотрудник», а другая — «Транзакция».
Шаг 3. Определите отношение «один ко многим».
Теперь в Сотрудник. php, определите следующую функцию.
phpnamespace App; используйте Illuminate Database Eloquent Model; class Employee extends Model {public function transaction () {return $ this- > hasMany ('Приложение Транзакция'); }}
Теперь перейдите в терминал и нажмите следующую команду.
php artisan tinker
Tinker — это инструмент командной строки, который позволяет вам взаимодействовать с базой данных и может действовать как реальный объект, и мы можем выполнять с ним различные операции с базой данных.
В tinker вы можете ввести следующий код.
Employee :: find (1) -> transaction;
Вы можете увидеть все связанные записи Employee с идентификатором 1, отображаемые из модели Транзакция.
Итак, это основное использование отношений Один ко многим .
Шаг 4: Обратное отношений.
Точно так же мы можем определить функцию в модели Transaction.php .
phpnamespace App; используйте Illuminate Database Eloquent Model; класс Transaction расширяет модель {public function employee () {return $ this-> ownTo ('App Employee'); }}
Снова перейдите к tinker .
Transaction :: find (2) -> employee-> amount;
Вы можете увидеть сумму. Вот как мы можем связывать друг друга через Relationship в Laravel.
Наконец, наш Laravel Учебник по отношениям «один ко многим» окончен. Спасибо за чтение.