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中的动态播种的主要内容,如果未能解决你的问题,请参考以下文章