Laravel的Model :: create()函数不是设置自定义字段值

时间:2015-05-12 18:17:43

标签: php laravel eloquent laravel-5

Laravel新手在这里,对不起,如果这很痛苦,但我已经被困在它上多年了!

目标:要使用表单中的完整值批量分配Quote::create()数据库插件, plus 将用户ID设置为当前登录的用户

问题:永远不会将user_id列写入数据库。每隔一列,但user_id仍为0。

我当然尝试将user_id添加到$fillable数组,但我不希望它是用户可填写的 - 我希望它由Laravel设置Auth::id()功能。

为什么这不会被存储的任何想法?是因为$quote->create()函数没有考虑先前设置的数据,只是将其参数作为要保存的所有内容?如果是这样,我该怎么做?

这是我的控制器的store()功能:

/**
     * Stores a created quote in the database
     *
     * @param QuoteRequest $request
     *
     */
    public function store(QuoteRequest $request)
    {
        // This method will only get fired if QuoteRequest passes
        $quote = new Quote;
        $quote->user_id = Auth::id();
        $quote->create($request->all());

        echo 'Job done';
    }

这是我的Quote型号:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;
use Auth;

class Quote extends Model {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'quotes';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'quote_person',
        'quote_value',
        'quote_date'
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [ ];

    /*
     * Request/User many-to-one relationship
     */
    public function user()
    {
        return $this->belongsTo('App\User');
    }

    /*
     * Belongs to current User scope
     */
    public function scopeMine($query)
    {
        return $query->where('user_id', Auth::id());
    }

}

2 个答案:

答案 0 :(得分:7)

试试这个,看它是否有效。

public function store(QuoteRequest $request)
{
    // This method will only get fired if QuoteRequest passes
    $quote = new Quote;
    $quote->fill($request->all());
    $quote->user_id = Auth::id();
    $quote->save();

    echo 'Job done';
}

答案 1 :(得分:3)

create功能被视为质量分配,因此受$fillable / $guarded影响。它也是一个静态函数,因此$quote->create()正在创建一个全新的Eloquent实例 - 这就是您手动分配的user_id丢失的原因。

您可以使用Model::unguard()暂时关闭保护。