laravel 5.4中的动态播种

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel 5.4中的动态播种相关的知识,希望对你有一定的参考价值。

我对laravel非常陌生,并且对该播种机有麻烦。我觉得这应该是一件容易的事,只是我还没有合适的工具。

我需要使用基于另一列的数据填充一列。更具体地说,我想获取employee_id,找到其在员工表中的位置,然后在应用程序表中填充该ID。这是我到目前为止的内容:


use IlluminateDatabaseSeeder;

use AppEmployee;
use AppApplication;


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();
        }

    }

}

这将以字符串形式返回我要查找的所有ID,但是如何将这些值放入应用程序表的location_id中?运行该播种器不会产生错误,但也不会执行任何操作。

让我知道您是否需要其他信息,在此先感谢。

答案

如果您只是从一个对象中拉location_id,将会更容易。另外,为消除该循环中对数据库的多次访问,建议您在循环之前引入一组雇员(仅从数据库中拉出一次),然后从该集合中找到该雇员的正确位置。

您现在拥有的方式,您可以在每个循环的应用程序上转到数据库来吸引员工。在循环之前进行收集将消除所有这些拉。

为了清楚起见,我将其分解为几个步骤,但您可以根据需要将其收紧:

$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();
}

以上每次都在写给数据库,这是我试图避免的,但是一旦完成,您总是可以研究将那些应用程序添加到集合中,然后保存集合。但这应该可以让您到达想要的位置。

以上是关于laravel 5.4中的动态播种的主要内容,如果未能解决你的问题,请参考以下文章

播种时LARAVEL 5.4 SQL“找不到列”

从 Laravel 中的 .env 返回数据类型

Laravel中的播种表错误?

Model Factory 和 Laravel 中的 DB 播种机有啥区别?

Laravel 5.4:动态验证规则

使用 Laravel 5 中的 --force 进行生产时,数据库卡在使用播种机迁移