2017-03-27 31 views
1

사용중인 두 개의 테이블이 있습니다.Laravel Seed가 다른 테이블의 열에서 열을 업데이트합니다.

예를 들어 게시물을 사용하려고합니다.

첫 번째는 그 다음 내가 Authors 테이블에 국가를 추가 할 authors 테이블을

id|name 
1 |Devin 
2 |James 

이 게시물 테이블

id|name |author|author_id|country 
1 |test |Devin |1  |South Africa 
2 |test2|James |2  |Whales 
3 |test3|Devin |1  |South Africa 

입니다. 그래서 난 내 표는 내가 무엇을 달성하려고하는 게시물 테이블을 기반으로 저자 테이블에 국가 씨앗하는 데이터베이스 시더를 작성하는 지금이

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 그레이, 당신은 어디를 설명 할 수 처음부터 작성자 테이블을 채우고 있습니까? 나는 언제 당신이 저자 이름을 그곳에두고 있나? 바로 그 곳에서 나라에 들어가는 것이 가장 효율적입니다. – Learner

+0

이것은 기존 응용 프로그램에 대한 빠른 수정이며, 외래 키를 추가하는 중이지만 지금은이 수정을 밀어 넣어야합니다. 위의 코드는 작동하고 필요한 작업을 수행하지만 더 나은 방법이 있는지 알아보기 위해 –

+0

기존 응용 프로그램이라도 :) 작성자 테이블에 작성자 이름을 넣는 컨트롤러 또는 시드가 있어야합니다. :) – Learner

답변

0

그렇다면 OP가 설명에서 설명했듯이, 나는 그의 기능에서 작은 최적화를 제안 할 수 있습니다. 당신은 같은 시간에 get()first()를 사용할 필요가 없습니다 만 first()이 작업을 수행합니다

대신 사용

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

의를

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

완벽, 도움을 주셔서 감사합니다 –

+0

Np, 더 효율적 일 수 있기를 바랍니다. – Learner