私は2つのテーブルを使用しています。Laravel Seedは別のテーブルの列から列を更新します
たとえば、投稿を使用します。
は、最初は投稿テーブル
id|name |author|author_id|country
1 |test |Devin |1 |South Africa
2 |test2|James |2 |Whales
3 |test3|Devin |1 |South Africa
ですそれから私は私がAuthorsテーブルに国を追加したい
id|name
1 |Devin
2 |James
authorsテーブルを持っています。だから私はこの
id|name |country
1 |Devin |NULL
2 |James |NULL
に見えるように私のテーブルを取得するには、移行をした今、私が達成しようとしていますどのようなポストテーブルに基づいて、著者テーブルに国をシードするデータベース・シーダを書くことです。
私はそのAUTHOR_IDのためのポストの国をつかむと、それは私の質問があり、この
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
]);
}
}
}
ような何かを考えた。しかし、それは、いくつかの重い物を持ち上げるだろう誰もがより良い方法を提案することができ、あるいはそれができるかどうかを確認するために、現在の方法を見てみるようにそれが見えます改善するか?
@Devinグレーの、あなたはどこに説明することができます最初の場所にauthorsテーブルを作成していますか?私はいつあなたの著者名を入れていますか?その場所では、国に入るのが最も効率的です。 – Learner
これは既存のアプリケーションのクイックフィックスですが、私は外部キーを追加していますが、今はこの修正を適用する必要があります。上記のコードは動作し、必要な処理をしますが、より良いメソッドがあるかどうかを調べることができます –
既存のアプリケーションであっても、authorsテーブルに著者名を入れているコントローラまたはシーダーが必要です:) – Learner