Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 04.01.2017 23:59:20

Отношения таблиц внутри базы данных!

Всем добрый день, подкиньте светлые идеи, как решить задачку.

У меня есть две таблицы Компания и Сотрудники. В таблице сотрудников по мимо имени есть колонка company_id, которая через foreign key подключается к таблице компаний.

Теперь вопрос. Как сделать это автоматически, чтобы руками не надо было проставлять?


            $file = $request->file('file');
            $filename = time() . '.' . $file->getClientOriginalExtension();
            $location = public_path('files/');
            $file->move($location, $filename);
            $oldFilename = $post->file;

            $post->file = $filename;
            $csv = public_path('files/').$filename;

                $query = sprintf("LOAD DATA local INFILE '%s' INTO TABLE `items` FIELDS TERMINATED BY ','  ESCAPED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES (
                `responseID`,
                `email`,
                `department`,
                `position`,
                `term_office`,
                `term_company`,
                `education`,
                `sex`,
                `age`),
                addslashes($csv));

            $post = Post::find($id);
           

            $post->name = $request->input('name');
            $post->company_id = $request->input('company_id'); <---- Проставляю сейчас руками, но хочется сделать автоматически.
            $post->empl = $request->input('empl');


            $post->save();

       
                return DB::connection()->getpdo()->exec($query);

                Storage::delete($oldFilename);

Надеюсь на вашу мудрость, а то уже не знаю как это сделать.

Изменено kaplan1235 (05.01.2017 00:00:29)

Не в сети

#2 05.01.2017 09:53:08

Re: Отношения таблиц внутри базы данных!

Ну самый простой ответ - вместо поля сделать комбобокс, где выбиралась бы компания, в которой работает сотрудник. Всё ж не ID руками.

На а как более автоматически узнать, в какой компании работает вводимый сотрудник - это Вы должны нам рассказать.

Не в сети

#3 05.01.2017 10:53:56

Re: Отношения таблиц внутри базы данных!

Идея была такая: Первым шагом создается профиль компании. Вторым шагом отправляем редактировать этот профиль и там появляется возможность импорта сотрудников. Взять текущий ID компании и проставить его во всех импортируемых сотрудников. Текущий ID мы знаем, т.к. находимся на странице редактирования этой компании. Но вот как закодить это сделать никак не соображу.

Не в сети

#4 05.01.2017 11:06:12

Re: Отношения таблиц внутри базы данных!

Если б у меня была бы такая задача - я бы в мульти-селектном списке выводил бы сотрудников для импорта, и пользователь мог бы выбрать несколько сотрудников - и нажать кнопку "Импортировать". Получал бы ИД_компании (из скрытого поля, например) и массив ID выбранных сотрудников и запускал бы банальный запрос:

UPDATE Сотрудники SET company_id=ИД_компании WHERE id IN (список ID выбранных сотрудников через запятую)

Не в сети

#5 05.01.2017 11:35:57

Re: Отношения таблиц внутри базы данных!

Ты спрашиваешь как не подставлять company_id вручную? Зависит от связи. В твоем случае, если связь hasMany(), то это будет что-то вроде:

$company = find($id);
$company->employees()->create($request->all());

Не в сети

#6 05.01.2017 20:58:06

Re: Отношения таблиц внутри базы данных!

tmanager, хорошее решение, но я не знаю ID сотрудников, когда импортирую они уже даны.

AlexeyMezenin, вот это уже ближе, помогите разобраться, пожалуйста. Я честно, только учусь, знаний катастрофично не хватает.

Две модели - Post.php и Item.php. Post.php модель для названия компании; Item.php для импорта сотрудников.

Post.php
public function items()
    {
        return $this->hasMany('App\Item');
    }
}

-------------------------------
Item.php
protected $table = 'items';

      public function posts()
    {
        return $this->belongsTo('App\Post');
    }
}

PostController.php

$file = $request->file('file');
            $filename = time() . '.' . $file->getClientOriginalExtension();
            $location = public_path('files/');
            $file->move($location, $filename);
            $oldFilename = $post->file;
            $post->file = $filename;
            $csv = public_path('files/').$filename;

            $query = sprintf("LOAD DATA local INFILE '%s' INTO TABLE `items` FIELDS TERMINATED BY ','  ESCAPED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES (
                `responseID`, `email`, `department`, `position`, `term_office`,
                `term_company`,`education`, `sex`, `age`, `Final_Q1`, `Final_Q2`,
                `Final_Q3`, `Final_Q4`, `Final_Q6`, `Final_Q7`, `Final_Q8`, `Final_Q10`,
                `D_1`, `Final_Q12`, `Final_Q13`, `Final_Q14`, `Final_Q15`, `Final_Q16`,
                `Final_Q17`, `Final_Q18`, `Final_Q19`, `Final_Q20`, `Final_Q21`, `Final_Q22`,
                `Final_Q23`, `Final_Q24`, `D_2`, `Final_Q25`, `Final_Q26`, `Final_Q27`,
                `Final_Q28`, `Final_Q29`, `Final_Q30`, `Final_Q31`, `D_3`, `Final_Q33`,
                `Final_Q34`, `Final_Q35`, `Final_Q36`, `Final_Q37`, `Final_Q38`,
                `Final_Q39`, `D_4`, `Final_Q40`, `Final_Q41`, `Final_Q42`, `Final_Q44`,
                `Final_Q45`, `Final_Q47`, `D_5`, `Final_Q49`, `Final_Q50`,
                `Final_Q51`, `Final_QA52`, `Final_QB52`, `Final_QC52`, `D_6`,
                `Final_Q52`, `Final_Q53`, `Final_Q54`, `Final_Q55`, `Final_Q56`,
                `Final_Q57`, `D_7`, `Final_Q59`, `Final_Q60`, `Final_Q61`,
                `Final_Q62`, `Final_Q63`, `Final_Q64`, `D_8`, `Final_Q65`,
                `Final_Q66`, `Final_Q67`, `Final_Q69`, `Final_Q70`, `Final_Q71`,
                `Final_Q73`, `Final_Q74`, `Final_Q75`, `D_9`, `Final_Q76`,
                `Final_Q77`, `Final_Q78`, `Final_Q80`, `Final_Q81`, `Final_Q82`,
                `Final_Q83`, `Final_Q84`, `D_10`, `Final_Q85`, `Final_Q86`,
                `Final_Q87`, `Final_Q88`, `Final_Q89`, `Final_Q90`, `Final_Q91`,
                `Final_Q92`, `Final_Q93`, `Final_Q94`, `Final_Q95`, `D_11`, `Final_Q96`,
                `Final_Q97`, `Final_Q98`, `Final_Q99`, `Final_Q100`, `Final_Q101`,
                `Final_Q102`, `Final_Q103`, `D_12`, `TotalEngag`, `TotalEngagBin`, `ex_comp`)",
                addslashes($csv));

            $post = Post::find($id);
            $post->items()->create($request->all());

            $post->name = $request->input('name');
            $post->category_id = $request->input('category_id');
            $post->empl = $request->input('empl');
            $post->save();

            return DB::connection()->getpdo()->exec($query);
            Storage::delete($oldFilename);

Не в сети

Подвал раздела