2017-04-03 41 views
0

我希望將我的複選框組Form::checkbox('services[]')與來自數據透視表的數據綁定,但我遇到了麻煩,我認爲這是因爲沒有密鑰與service_id用Laravel Form Builders使用複選框組綁定數據透視表

我的數據模型如下:

業務
服務
Business_Service許多存儲許多鏈接表。

刀片模板

@foreach($service as $service) 
{!! Form::checkbox('services[]', $service->id, (in_array($service->id, $selected_services) ? true : false)) !!} 
@endforeach 

控制器

$service = Service::all(); 
$selected_services = Auth::user()->business->services()->get(); 

return view('signup.step2', compact('service', 'selected_services')); 

當我回到$ selected_services我可以看到以下內容:

[{ 「ID」:2,「名稱「:」服務 1「,」圖像「:」picture.png「,」created_at「:」2017-03-31 00:31:20「,」updated_at「:」2017-03-31 00:31:20「,」pivot「:{」business_id「:103,」service_id「:2}},{」id「: 3,「name」:「服務 2」,「image」:「picture.png」,「created_at」:「2017-03-31 00:31:23」,「updated_at」:「2017-03-31 零點31分23" 秒, 「樞軸」:{ 「business_id」:103, 「service_id爲」:3}}]

我試圖改變$selected_services這樣的:

$selected_services = Auth::user()->business->services()->keyBy('service_id'); 

但這隻返回一行,並不按預期將某個鍵關聯到該行。

+1

一個小小的點(in_array($服務 - > ID,$ selected_services)真的?假的)'是'in_array'已經返回一個布爾值,所以三元是多餘的。改用'in_array($ service-> id,$ selected_services)'。 – fubar

回答

0

如果你想使用內置的Laravel功能,那麼你可以使用Collection::pluck函數。用`

$businessServices = Auth::user()->business->services->pluck('id'); 
0

我可以準備另一個數組而不是使用集合Eloquent返回,但我希望有一些內置函數可以使用Laravel。

$service = Service::all(); 
$business_services = Auth::user()->business->services()->get(); 

$selected_services = []; 
foreach ($business_services as $ss) { 
    $selected_services[] = $ss->pivot->service_id; 
} 

return view('signup.step2', compact('service', 'selected_services'));