我正在尝试存储另一个表的数据,但它不起作用。我是 Laravel 的新手。
请大家帮助我。
我有一个名为 external_event_venues 的表,其中我有名为设施的列。
我有另一个名为 venue_amenities 的表,其中 id 作为外键 external_event_venue_id ,列名称为 amenity_id。
我分配表之间的关系是这样的: ExternalEventVenue.php
public function amenities()
{
return $this->hasMany(VenueAmenities::class,'external_event_venue_id', 'id');
}
我在动画代码中有 create.blade 文件:
<x-forms.label fieldId="amenity" :fieldLabel="__('modules.venue.amenities')" fieldName="amenities[]" fieldRequired="true">
</x-forms.label>
<div class="d-flex flex-wrap mb-3 ">
@foreach(config('global.amenities') as $key => $value)
<x-forms.checkbox :fieldLabel="$value" fieldName="amenities[]" fieldId="{{$key}}" fieldValue="{{$key}}"/>
@endforeach
</div>
我已在我的 global.php 文件中为其分配了数组:
<?php
return[
'amenities' => [1 => 'Beachfront', 2 => 'A/V Equipement', 3 => 'Handicap Accessible', 4 => 'Pet Friendly', 5 => 'Outdoor Space', 6 => 'Breakout rooms', 7 => 'Business Center', 8 => 'Cab', 9 => 'Rooftop',10 => 'Theater space' ,11 => 'Parking' ,12 => 'Media room',13 => 'Spa' ,14 => 'WiFi'],
];
我想使用控制器方法存储数组数据:
public function store(Request $request)
{
...
$venue->amenities = $request->amenity;
$venue->save();
$venue = new ExternalEventVenue();
if (isset($request->amenity_id)) {
foreach ($request->amenity_id as $amenityId)
{
if ($amenityId !== null) {
$amenity = new VenueAmenities();
$amenity->amenity_id = $amenityId;
$amenity->external_event_venue_id = $venue->id;
$amenity->save();
}
}
}
}
请任何人都可以帮助我......
让我们从简化的数据库开始来实现您的目标。
假设我们有这个模式:
venues
id
name
amenities
id
name
amenity_venue (pivot table)
id
venue_id
amenity_id
场馆模型:
class Venue extends Model
{
public function amenity()
{
return $this->belongsToMany(Amenity::class);
}
}
便利设施模型:
class Amenity extends Model
{
// ...
}
神奇的事情发生在 sync 函数中,它将数据存储在数据透视表 (amenity_venue) 中以实现多对多关系。
public function store(Request $request)
{
//...
// if you don't create a new entity here, you have to pass the ID of an existing entity
$venue = Venue::find($request->venueId);
// amenities[] are the selected checkboxes as an array
$venue->amenity()->sync($request->amenities);
}
如果您遵循命名约定,Laravel 将为您完成所有工作。