2013-09-08 1 views
0

"기업"이라는 테이블에서 Eloquent를 사용하여 단일 행을 선택합니다. 모든 비즈니스는 하나 이상의 "산업"과 연관 될 수 있습니다. 나는 비즈니스 모델에서이 설정 한 있도록 :Laravel : Eloquent, many to many 관계, 관련 모델의 ID 만로드하려면 어떻게해야합니까?

:

$mdl = Business::find($business_id); 
$mdl->load('industries'); 
return Response::json($mdl); 

이 이런 식으로 뭔가를 반환 내가 산업을로드 열망 컨트롤러에서

public function industries() { 
    return $this->belongsToMany('Industry'); 
} 

나는 모델을 선택하면
{"id":123,"name":"My Business","address":"123 Easy Street","industries":[{"id":1,"name":"Technology"},{"id":7,"name":"Research"}]} 

이것은 내가 필요한 거의 것입니다. 난 그냥 응답이 대신 같이이 찾고 있어요 :

{"id":123,"name":"My Business","address":"123 Easy Street","industries":[1,7]} 

난 그냥 이런 식으로 뭔가를 할 수 알고 :

$ind = array(); 
foreach($mdl->industries as $industry) $ind[] = $industry->id; 
$mdl->industries = $ind; 

차라리하지만 그렇게하지 않는 게 좋을. 그것은 추한 것이고 내 코드는 매우 비상식적 인 것처럼 보입니다. 동기화 방법은의 배열을 받아

$mdl->industries()->sync(Input::get('industries')); 

: 나는 비즈니스를 저장할 때 나는 이런 식으로 뭔가를 사용하기 위하여려고하고 있기 때문에

나는 처음에이 방법을하고 싶은 이유는 ID 그래서 나는 오히려 JSON 개체가 서버에서 가고 서버에 동일한 형식을 가지고 싶습니다. 나는 객체를로드 할 때 객체 배열을 저장하지 않고 객체를 저장할 때 ID 배열을 사용하지 않습니다. 이런 종류의 일이나 내가하려는 일을 성취하기위한 더 쉬운 방법을위한 모범 사례가 있습니까?

감사합니다. 이에게 많이 사용하는 경우

답변

3
$mdl = Business::with('industries')->find($business_id)->toArray(); 
$mdl['industries'] = array_pluck($mdl['industries'], 'id'); 
return $mdl; 

, 당신의 Business 모델에 다음과 같은 방법을 추가

public static function getWithIdustryIds ($business_id) 
{ 
    $mdl = Business::with('industries')->find($business_id)->toArray(); 
    $mdl['industries'] = array_pluck($mdl['industries'], 'id'); 
    return $mdl; 
} 
+0

모델에서이 작업을 수행 할 수있는 방법이 있으므로 모든 컨트롤러에서이 코드를 반복하지 않아도됩니까? –

+0

@ BenjaminOman - 모델에 정적 메서드를 추가하기 만하면됩니다. 나는 대답을 업데이트했다. –

0

귀하의 모델 관계가

public function industries() { 
    return $this->belongsToMany(Industry::class); 
} 

을해야한다 가정하면 피봇 테이블 industry_id 열이 있습니다.

을 사용하면 industry_ids 만 열망 할 수 있습니다.
$mdl = Business::with(['industries' => function($query){ 
    $query->select('industry_id'); 
}])->get()