Отношения Laravel и ограничения внешнего ключа - PullRequest
0 голосов
/ 23 октября 2018

У меня есть две модели и таблицы миграции.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Room extends Model
{
    public function guest()
    {
        return $this->hasOne(Guest::class);
    }
}

-

namespace App;

use Illuminate\Database\Eloquent\Model;

class Guest extends Model
{
    public function room()
    {
        return $this->hasMany(Room::class);
    }
}

комната -> id, квадратные метры, guest_id

guest -> id, имя, фамилия, адрес электронной почты, телефон, room_id (обязательно)

Номер hasOne Guest -> реализован в модели

Гость hasMany Rooms -> реализован в модели

Если я создаю гостя, мне нужно добавить номер комнаты.Комната в room_table с соответствующим идентификатором должна автоматически обновляться с помощью guest_id.

Пример new Guest: id (2), Имя, фамилия, телефон, электронная почта, room_id (3) -> Комната с идентификатором 3 должна показываться Гостю с идентификатором 2.

Как мне это реализовать?

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Класс номера

class Room extends \Illuminate\Database\Eloquent\Model {
    /**
     * @var string
     */
    protected $table = 'room';

    /**
     * Relationship - Belongs To - Guest
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    public function guest()
    {
        return $this->belongsTo(Guest::class,'guest_id');
    }
}

Гость класса

class Guest extends \Illuminate\Database\Eloquent\Model {
    /**
     * @var string
     */
    protected $table='guest';

    /**
     * Relationship - Has Many - Rooms
     *
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     */
    public function rooms()
    {
        return $this->hasMany(Room::class,'guest_id');
    }
}

Код для сохранения указанных выше отношений:

$room = Room::create();
$room->save();

$guest = Guest::create();
$guest->save();
//Add guest to room - 1st method
$guest->rooms()->save($room);

//Add guest to room - 2nd method
$room->guest()->associate($guest);
0 голосов
/ 23 октября 2018

Модель Гость

namespace App;

use Illuminate\Database\Eloquent\Model;

class Guest extends Model
{
    public function room()
    {
        return $this->hasMany(Room::class);
    }
}

и модель комнаты

namespace App;

use Illuminate\Database\Eloquent\Model;

class Room extends Model
{
    public function guest()
    {
        return $this->hasOne(Guest::class);
    }
}

в вашем контроллере загружены все модели в конструктор

 $gust_id=$request->get('guest_id');
 $room_id=$request->get('count_of_rooms');
 $squrmtr=$request->get('squaremeters');

позволяют вам после сохранения данных гостя выесть несколько комнат, и вы должны сохранить его

for($i = 0; $i < count($request->get('count_of_rooms')); $i++)
{
    $rooms[] = new Room([
        'guset_id'  => $guest->id,
        'squaremeters' => $squrmtr[$i],
    ]);
}
$guest->room()->saveMany($rooms);
0 голосов
/ 23 октября 2018

В вашем контроллере добавьте эту функцию:

public function CheckInUser($guest_id,$room_id)

 $guest = Guest::where('id',$guest_id)->firstOrFail();
 $room = Room::where('id',$room_id)->firstOrFail();

 $guest['room_id'] = $room_id;
 $guest->save();

 $room['guest_id'] = $guest_id;
 $room->save();

}

Теперь вы можете изменить комнату гостя в любое время, вызвав функцию выше, как показано ниже:

CheckInUser(2,3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...