2017-12-31 81 views
2

안녕하세요 "CartSeeder"로 데이터베이스 시더를 만들었지 만 시드를 시작하지 못하면 오류가 발생합니다. 코드를 여러 번 확인했지만 괜찮은 것 같습니다.Laravel-5.5 Null 오류 (다 대다 관계)에서 멤버 함수 제품 호출

세 개의 테이블, 카트, 제품 및 피벗 테이블이 있습니다. 나는 그들의 모델을 가지고있다. 아래에있는 정보를 볼 수 있습니다.

CartSeeder;

$cart = Cart::where('user_id',\Auth::id())->first(); 
$products = Product::inRandomOrder()->take(5)->get(); 
$cart->products()->sync($products,false); 

장바구니

public function products(){ 
     return $this->belongsToMany('App\Product','cart_product','cart_id','product_id'); 
    } 

[제품 모델]

public function carts(){ 
     return $this->belongsToMany('App\Cart','cart_product','product_id','cart_id'); 
    } 

여기에서 실수를 할 수 있습니까?

답변

2

즉, user_id은 인증 된 사용자 ID와 동일한 카트가 없습니다. 이는 웹 요청이 아닌 콘솔 명령을 사용하여 시드를 실행하기 때문입니다.

+0

즉, 로그 된 사용자가 보이지 않는 것을 볼 수 있습니다. (즉, 'user_id', \ Auth :: id()) -> first(); http 요청? –

+0

@cervantes 네, 그렇게 할 수 없습니다. 이 명령을 동적으로 실행하는 경우에는'auth() -> id()'를 시드 매개 변수 또는 다른 것으로 전달할 수 있습니다. –

1

오류를보고 $cart 변수가 null이 아닌지 확인하십시오.

추가 :

dd($cart); 

또한 실제 응용 프로그램에서 너무 같은 firstOrFail를 사용하는 것이 더 확신이

null이 아니다 만들려면 : 경우에 따라

$cart = Cart::where('user_id',\Auth::id())->firstOrFail(); 

합니다. 이렇게하면이 사용자에 대한 장바구니가없는 경우 앱이 중지됩니다.

+0

시드 할 때 이것을 실행 했습니까? 일반적으로 시드 할 때 기록 된 사용자가 없습니다. –

+0

네가 옳았다. $ cart는 null을 반환한다. 하지만 왜? 시드하기 전에 기록했습니다. –

+2

콘솔을 통해 명령을 실행하면 웹 사이트를 사용하여 로그인 한 것이 중요하지 않습니다. 사용자 인증을 원한다면 ID 2 –