2014-11-27 7 views
0

가장 좋은 방법은 무엇입니까? 예를 들면 다음과 같습니다.Laravel 4 - 소프트 삭제 및 외계인 키 참조

나는 여러 인물 관계가있는 도시가 있습니다.

어떤 이유에서든 소프트 삭제를 사용하여 도시를 삭제해야하는 경우 일부 사람이 city_id 참조를 분실했을 수 있습니다. 이렇게하면 Laravel이 "비 객체의 속성을 얻으려고하는 중입니다"라는 오류 메시지를 표시합니다.

도시명을 분실 한 사람이 실수없이 표시 될 수 있도록해야합니다.

내가 그것은 작동하지만 나에게 추악한 조금 보이는

echo isset($person->city) ? $person->city->name : ''; 

같은 것을 쓸 때. 난 그냥

echo $person->city->name; 

을 쓸 때 도시가 삭제 되었기 때문에

는 나는 "비 객체의 속성을 얻기 위해 시도"메시지가 표시됩니다.

어떻게 처리합니까?

+0

laravel이 도시는 그 다음 행이 소프트 삭제 된 null의 경우 delete_at 필드가 null가 아닌 것으로 확인됩니다 사람 개체에 개체를 연결하는 데 사용하는 쿼리 및 결과에 나타나지 않습니다. 이것을 둥글게하려면 어지러운 비트를하십시오. –

+0

고마워요. @MattBurrow. 어쩌면 내가 다른 방식으로 그것을 구축해야합니다. 도시 테이블에서 "status : enum ('active', 'inactive')와 같은 일부 필드를 사용하여 html datagrid 사용자의 유산"삭제 된 "도시를 표시하고 도시 DataGrid의 비활성 도시를 숨 깁니다. –

+0

관계 메소드에'withTrashed()'를 사용하여 소프트 삭제 된 결과를 쿼리에 포함 시키십시오. 여기에는 모든 삭제 된 모델 즉 사례가있는 도시가 포함됩니다. 그러면'$ person-> city-> name'을 사용할 수 있습니다. –

답변

0

모든 모델과 삭제 된 모델을 가져 오려면 Person 모델의 도시 관계 방법에 다음을 추가하십시오.

public function cities(){ 
    return $this->belongsTo('Cities\Model\Path')->withTrashed(); 
} 
0

잘 작동하는 @MattBurrow입니다. 정확히 내가 필요한 것. 내 경우에는 hasMany를 belongsTo로 바꾼다.

모델/Person.php

class Person extends \Eloquent { 

    public function city(){ 
     return $this->belongsTo('City')->withTrashed(); 
    } 
}