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());
}
}
答案 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()
暂时关闭保护。