提问人:Khushbu Joshi 提问时间:10/7/2023 最后编辑:Khushbu Joshi 更新时间:10/9/2023 访问量:67
如何使用laravel存储数组数据?
How to store array data using laravel?
问:
我正在尝试存储另一个表的数据,但它不起作用。我是laravel的新手。
请帮帮我。
我有一个名为 external_event_venues 的表,我在名为 Amenities 的里面有列。
我有另一个名为 venue_amenities 的表,其中我将 id 作为外键external_event_venue_id列名为 amenity_id。
我分配的表之间的关系是这样的:外部事件场地.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>
我已经在我的全局.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();
}
}
}
}
请任何人都可以帮我解决这个问题......
答:
1赞
slp
10/9/2023
#1
让我们从一个简化的数据库开始,以实现您的目标。
假设我们有这个架构:
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
{
// ...
}
然后,魔术发生在同步函数中,该函数将数据存储在数据透视表 (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 将为您完成所有工作。
评论