@sacred1

Eloquent ORM в Laravel?

Есть база данных,в ней 2 таблицы(peoples,informations)связанные внешним ключем(в данном случаи это id) так же есть одна форма ввода данных.Как сделать так чтобы вводя данные формы,у нас было распределение этих самых данных в разные таблицы,получается пока только с одной таблицой.Надо ли создавать две модели для этого,или прописать связи в методе класса нашей модели?Буду очень благодарен,если распишете практически как это в laravel реализуется.
  • Вопрос задан
  • 3136 просмотров
Пригласить эксперта
Ответы на вопрос 3
RusPOPsy
@RusPOPsy
Говорила мама, учи математику ...
Примерно так
$people = People::find($id)->with('Information')->first();
$people->name = Input::get('name');
$people->Information->info = Input::get('info');
$people->save();
$people->Information->save();
Ответ написан
Сделайте разделение данных на уровне формы:

<input name="people[peoplData]" type="text">
...
<input name="information[informationData]" type="text">


В контроллере (или где Вы реализуете бизнес-логику), выделяйте из Input данных соответствующие массивы (people и information) и уже эти массивы используйте при создании соответствующих объектов. Валидацию этих массивов тоже проще делать в вычленённом виде, что крайне советую делать (валидировать) предварительно и в полном объёме до начала создания объектов, чтобы не было неожиданностей. Делайте связку либо после создания, либо последовательно: создаёте один объект, добавляете идентификатор для связки в массив с данными для другого объекта и создавайте его.

Чтобы как-то в последствии было проще - разделяйте логику по созданию/изменению объектов в отдельные классы/методы, чтобы можно было туда передавать данные и получать в ответ созданные объекты, которые в последствии будете использовать (или не получайте, если будете использовать cqrs).

И да - если 2 таблицы, то это 2 объекта, под которые нужно писать свои модели и прописывать в них соответствующие связи для учёта отношений.
Ответ написан
Комментировать
@reedwalter24
Я бы посоветовал две модели, если я правильно Вас понял. Создаем две модели People и Information в
модели People прописываем связь
public function informations()
    {
        return $this->belongsToMany('Information');
    }

После этого мы можем сделать следующее:
$people = new People();
$people->name = 'John';
if ($people->save()) {
    $info1 = new Info();
    $info->title = 'info1';
    $info1->save();
    
    $info2 = new Info();
    $info->title = 'info2';
    $info2->save();

    $people->informations()->sync(array(info1->id, info2->id));
}


Описал идею, проверить работоспособность в данный момент не могу :)
Почитайте про sync
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы