2014-11-10 2 views
0

if 문 앞에 속성에 액세스 할 수 있으며 if 조건을 다른 것으로 변경하면 액세스 할 수 있습니다. if 문 내부의 속성.if() 조건 내에서 Laravel 오류 "비 객체의 속성을 가져 오려고 시도 중"

$market_ids = []; 
$state->cities->each(function($city) use (&$market_ids) 
{ 
     dd($city->market->id); // <-Accessible here 

     if (!in_array($city->market->id, $market_ids)){ // Error: Trying to get property of non-object 

     dd($city->market->id); // Accessible here 
     $market_ids[] = $city->market->id; 

     } 
}); 

오류 :

누구든지 전에이로 실행이 아닌 개체의 속성을 얻으려고 노력하지만 경우 조건 내부의 속성에 액세스하려고하면 오류가 발생합니다? 당신이 사용 된 바와 같이,

$market_ids = []; 
$state->cities->each(function($city) use (&$market_ids) 
{ 

     if ($city->market === null) { 
     echo " null market for ".$city->name."<br />"; 
     continue; 
     } 


     if (!in_array($city->market->id, $market_ids)){ 

     $market_ids[] = $city->market->id; 

     } 
}); 

dd 먼저 기록하고 그것을 위해 그것을 확인 :

+0

어떤 PHP 버전을 실행합니까? – androidavid

답변

1

나는 당신이 당신의 각 도시에 대한 귀하의 관계는 null는 반환하지 않는 것을 확인해야한다, 생각 두 번째 또는 세 번째 이후 행에 해당 시장 개체가 있다는 것을 의미하지는 않습니다. 예를 들어 100 개 도시가 있고 99 개 도시 중 9 개 도시에는 시장이 있으며 그 중 하나는 그렇지 않습니다. 그들 중 한 사람에게는 시장이 없으므로 시장 ID를 요구할 수 없기 때문에 물어 본 오류가 발생할 것입니다.

$market_ids = []; 
$state->cities->each(function($city) use (&$market_ids) 
{ 
     echo $city->market->id; // not dd but simply echo 
}); 

당신은 아마 같은 오류가 발생합니다 : 당신이 사용하는 경우 때문에

그래서, 분명히이 오류가 아니라 if 또는 in_array에 연결되어 있지 확인합니다.

+0

Marcin에게 감사드립니다! 이것은 정확한 문제였습니다. 내 도시 중 하나에 시장이 없었습니다. – Kirschbaum

1

Trying to get property of non-object means the source $city->market not an object in some cases, or check this edit:

$market_ids = []; 
$state->cities->each(function($city) use (&$market_ids) 
{ 
     $id = $city->market->id; 

     dd($id); 

     if (! in_array($id, $market_ids)){ 

     dd($id); 
     $market_ids[] = $id; 

     } 
}); 
+1

그의 질문을 읽었습니까? 개체가 전에 액세스 할 수 있습니다 ... – androidavid

+0

오, 죄송합니다, 대답을 업데이 트 드리겠습니다 –

+0

if 조건 바깥 쪽은 객체입니다. 예를 들어, 첫 번째 dd()는 설명했습니다. – Kirschbaum

관련 문제