如何使用laravel存储数组数据?

问题描述 投票:0回答:1

我正在尝试存储另一个表的数据,但它不起作用。我是 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();
                }
            }
        }
    }

请任何人都可以帮助我......

php arrays laravel string type-conversion
1个回答
0
投票

让我们从简化的数据库开始来实现您的目标。

假设我们有这个模式:

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 将为您完成所有工作。

© www.soinside.com 2019 - 2024. All rights reserved.