【问题标题】:Best way to handle additional fields in mass assignment in Laravel?在 Laravel 中处理批量分配中附加字段的最佳方法?
【发布时间】:2022-01-07 02:27:52
【问题描述】:

应用\模型\地点:

<?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 的隐藏输入字段。我正在寻找最好的方法。

【问题讨论】:

  • @lagbox 但它看起来更像是 hack,而不是 Laravel 方式

标签: php laravel laravel-8


【解决方案1】:

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

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

这与将其移至$validated的分配相同:

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

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

【讨论】:

猜你喜欢
  • 2017-01-20
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 2019-05-03
  • 2017-06-22
  • 2016-06-27
  • 1970-01-01
相关资源
最近更新 更多