2017-03-27 8 views
1

私は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 
      ]); 
     } 
    } 
} 

ような何かを考えた。しかし、それは、いくつかの重い物を持ち上げるだろう誰もがより良い方法を提案することができ、あるいはそれができるかどうかを確認するために、現在の方法を見てみるようにそれが見えます改善するか?

+0

@Devinグレーの、あなたはどこに説明することができます最初の場所にauthorsテーブルを作成していますか?私はいつあなたの著者名を入れていますか?その場所では、国に入るのが最も効率的です。 – Learner

+0

これは既存のアプリケーションのクイックフィックスですが、私は外部キーを追加していますが、今はこの修正を適用する必要があります。上記のコードは動作し、必要な処理をしますが、より良いメソッドがあるかどうかを調べることができます –

+0

既存のアプリケーションであっても、authorsテーブルに著者名を入れているコントローラまたはシーダーが必要です:) – Learner

答えて

0

その場合、OPがコメントで説明したように、私は彼の機能で小さな最適化を提案することができます。あなたが唯一のfirst()が仕事をする、同じ時間にget()first()を使用する必要はありません。

代わり

$country = App\Post::where('author_id', $author->id)->get()->first(); 

使用

$country = App\Post::where('author_id', $author->id)->first(); 
+0

パーフェクト、すべての助けてくれてありがとうございます –

+0

Np、それがより効率的であることを望みます。 – Learner

関連する問題