Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем добрый день, подкиньте светлые идеи, как решить задачку.
У меня есть две таблицы Компания и Сотрудники. В таблице сотрудников по мимо имени есть колонка 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)
Не в сети
Ну самый простой ответ - вместо поля сделать комбобокс, где выбиралась бы компания, в которой работает сотрудник. Всё ж не ID руками.
На а как более автоматически узнать, в какой компании работает вводимый сотрудник - это Вы должны нам рассказать.
Не в сети
Идея была такая: Первым шагом создается профиль компании. Вторым шагом отправляем редактировать этот профиль и там появляется возможность импорта сотрудников. Взять текущий ID компании и проставить его во всех импортируемых сотрудников. Текущий ID мы знаем, т.к. находимся на странице редактирования этой компании. Но вот как закодить это сделать никак не соображу.
Не в сети
Если б у меня была бы такая задача - я бы в мульти-селектном списке выводил бы сотрудников для импорта, и пользователь мог бы выбрать несколько сотрудников - и нажать кнопку "Импортировать". Получал бы ИД_компании (из скрытого поля, например) и массив ID выбранных сотрудников и запускал бы банальный запрос:
UPDATE Сотрудники SET company_id=ИД_компании WHERE id IN (список ID выбранных сотрудников через запятую)
Не в сети
Ты спрашиваешь как не подставлять company_id вручную? Зависит от связи. В твоем случае, если связь hasMany(), то это будет что-то вроде:
$company = find($id);
$company->employees()->create($request->all());
Не в сети
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);
Не в сети
Страницы 1