Laravel 种子从另一列更新一列 table
Laravel Seed update a column from column on another table
我正在使用两个 table。
例如,我将使用帖子。
第一个是帖子table
id|name |author|author_id|country
1 |test |Devin |1 |South Africa
2 |test2|James |2 |Whales
3 |test3|Devin |1 |South Africa
然后我有作者table
id|name
1 |Devin
2 |James
我想给作者添加国家table。所以我做了一个迁移,让我的 table 看起来像这样
id|name |country
1 |Devin |NULL
2 |James |NULL
现在我想要实现的是编写一个数据库播种器,它将根据帖子 table 将国家播种到作者 table 中。
我想获取那个 author_id 的帖子所在的国家/地区,然后将国家/地区插入作者 table 以便它看起来像这样
id|name |country
1 |Devin |South Africa
2 |James |Whales
我的问题是,是否可以使用播种机来做到这一点?或者有没有更好的方法来做到这一点,而不必为每个作者手动完成。
我想做这样的事情
<?php
use Illuminate\Database\Seeder;
class AlterOperatorsData extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$authors = App\Author::all();
foreach ($authors as $author) {
$country = App\Post::where('author_id', $author->id)->get()->first();
DB::table('authors')->update([
'country' => $country->country
]);
}
}
}
但这看起来会做一些繁重的工作,谁能提出更好的方法,或者看看当前的方法是否可以改进?
在这种情况下,正如 OP 在评论中所解释的那样,我只能建议对他的功能进行一些小的优化。您不需要同时使用 get()
和 first()
,只有 first()
可以完成工作:
而不是
$country = App\Post::where('author_id', $author->id)->get()->first();
使用
$country = App\Post::where('author_id', $author->id)->first();
我正在使用两个 table。
例如,我将使用帖子。
第一个是帖子table
id|name |author|author_id|country
1 |test |Devin |1 |South Africa
2 |test2|James |2 |Whales
3 |test3|Devin |1 |South Africa
然后我有作者table
id|name
1 |Devin
2 |James
我想给作者添加国家table。所以我做了一个迁移,让我的 table 看起来像这样
id|name |country
1 |Devin |NULL
2 |James |NULL
现在我想要实现的是编写一个数据库播种器,它将根据帖子 table 将国家播种到作者 table 中。
我想获取那个 author_id 的帖子所在的国家/地区,然后将国家/地区插入作者 table 以便它看起来像这样
id|name |country
1 |Devin |South Africa
2 |James |Whales
我的问题是,是否可以使用播种机来做到这一点?或者有没有更好的方法来做到这一点,而不必为每个作者手动完成。
我想做这样的事情
<?php
use Illuminate\Database\Seeder;
class AlterOperatorsData extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$authors = App\Author::all();
foreach ($authors as $author) {
$country = App\Post::where('author_id', $author->id)->get()->first();
DB::table('authors')->update([
'country' => $country->country
]);
}
}
}
但这看起来会做一些繁重的工作,谁能提出更好的方法,或者看看当前的方法是否可以改进?
在这种情况下,正如 OP 在评论中所解释的那样,我只能建议对他的功能进行一些小的优化。您不需要同时使用 get()
和 first()
,只有 first()
可以完成工作:
而不是
$country = App\Post::where('author_id', $author->id)->get()->first();
使用
$country = App\Post::where('author_id', $author->id)->first();