Dynami c посев в laravel 5.4 - PullRequest
       3

Dynami c посев в laravel 5.4

0 голосов
/ 28 марта 2020

Я чрезвычайно новичок в laravel и у меня проблемы с этой сеялкой. Я чувствую, что это должно быть легко, у меня просто нет подходящих инструментов для этого.

Мне нужно заполнить столбец данными, основанными на другом столбце. В частности, я хочу взять employee_id, найти их местоположение в таблице сотрудников и заполнить этот идентификатор в таблице приложений. Это то, что у меня пока есть:


use Illuminate\Database\Seeder;

use App\Employee;
use App\Application;


class ApplicationEmployeeLocationTableSeeder extends Seeder 
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $applications= Application::all();

        foreach ($applications as $application)
        {
            $location_id = Employee::whereId($application->employee_id)->pluck('location_id')->first();
        }

    }

}

Это возвращает все идентификаторы, которые я ищу в виде строки, но как мне поместить эти значения в location_id в таблице приложений? Запуск этой сеялки не приводит к ошибке, но она также ничего не делает.

Дайте мне знать, если вам нужна какая-либо другая информация, и спасибо заранее.

1 Ответ

0 голосов
/ 28 марта 2020

Было бы проще, если бы вы просто вытянули location_id из объекта. Кроме того, чтобы исключить множественные попадания в базу данных в этом l oop, я предлагаю вам вытащить коллекцию сотрудников (вытягивая из БД только один раз) перед l oop, а затем найти подходящее место для сотрудника из коллекция.

Как у вас сейчас, вы go обращаетесь к БД в каждом зацикленном приложении, чтобы привлечь сотрудника. Наличие коллекции до того, как l oop устранит все эти попытки.

Я разобью ее на несколько шагов ниже для ясности, но вы можете усилить это, если вы будете sh:

$applications= Application::all();
$employees = Employee::all();

foreach ($applications as $application)
{
    $emp = $employees->where('id', $application->id)->first()
    $location_id = $emp->location_id;
}

Чтобы поместить местоположение приложения обратно в базу данных, вы можете просто сохранить его в объекте приложения:

foreach ($applications as $application)
{
    $emp = $employees->where('id', $application->id)->first()
    $location_id = $emp->location_id;
    $application->location_id = $location_id;
    $application->save();
}

Выше каждый раз выполняется запись в БД, что я и делал пытаясь избежать, но как только вы добьетесь успеха, вы всегда можете исследовать добавление этих приложений в коллекцию и затем сохранить коллекцию. Но это должно привести вас туда, где вы хотите быть.

...