在 Laravel 中处理批量分配中的附加字段的最佳方法?

Best way to handle additional fields in mass assignment in Laravel?

App\Models\Venue:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Venue extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'user_id', 'category_id', 'phone', 'address', 'content'];

    public function user()
    {
        return $this->belongsTo(User::class, 'user_id');
    }

    public function category()
    {
        return $this->belongsTo(Category::class, 'category_id');
    }

    public function city()
    {
        return $this->belongsTo(City::class, 'city_id');
    }

    public function features()
    {
        return $this->belongsToMany(Feature::class, 'venue_feature');
    }
}

StoreVenueRequest(规则部分):

public function rules()
{
    return [
        'category_id' => 'required|integer',
        'title' => 'required|min:3',
        'city' => 'required|integer',
        'address' => 'required',
        'phone' => 'nullable|integer',
        'email' => 'nullable|email',
        'content' => 'required|min:10',
        'features' => 'required|min:3'
    ];
}

VenueController - store() 方法:

public function store(StoreVenueRequest $request)
{
    $venue = new Venue();
    $validated = $request->validated();
    $validated['user_id'] = auth()->id();
    $venue->create($validated);
    dd($venue);
}

代码运行完美,但我不确定这是最好的方法。有没有办法避免这两行,主要是第二行:

    $validated = $request->validated();
    $validated['user_id'] = auth()->id();

我唯一能想到的是表单中的隐藏输入字段和经过身份验证的用户 ID。我正在寻找最好的方法。

您可以将数组与 $validated 数组合并:

Venue::create($validated + ['user_id' => auth()->id()]);

这与将其移动到$validated的赋值相同:

$validated = $request->validated() + ['user_id' => auth()->id()];
Venue::create($validated);

如果您希望通过批量赋值来完成此操作,那么在此之前或此时您必须以某种方式合并数组。否则,您将设置数组的各个元素,就像您目前正在做的那样。