Laravel模型插入 - 减少代码大小

时间:2014-03-05 05:41:55

标签: php laravel

我知道它在效率方面实际上什么都不做,但有一种简单的方法可以缩小它;

$customer = new Customer;
$customer->firstname = $data['f_name'];
$customer->lastname = $data['l_name'];
$customer->email = $data['email'];
$customer->phone_number = $data['phone'];
$customer->venue_id = Auth::user()->venue_id;
$customer->save();

只需一行代码?

我的模特真的很胖。

2 个答案:

答案 0 :(得分:1)

您也可以使用create()方法但不是很大的区别,例如:

$customer = Customer::create(array(
    'firstname' => $data['f_name'],
    'lastname' => $data['l_name'],
    'email' => $data['email'],
    'phone_number' => $data['phone'],
    'venue_id' => Auth::user()->venue_id
));

为此,您必须在Customer模型中指定

protected $fillable = array('firstname', 'lastname', 'email', 'phone_number', 'venue_id')

或者您可以使用相反的

// Assumed you have an id and password field
protected $guarded = array('id', 'password');

或者您可以使用空白来允许所有字段

protected $guarded = array();

因此,您可以使用模型的create()方法进行质量分配。由于您已经有一个$data数组已经填充了输入,但字段名称与数据库表不匹配,因此,如果您可以使用正确的数据库字段名称填充$data变量,那么您可以使用$data变量1 {} create()方法中的变量。

此外,您可以直接使用Input这样的内容:

$inputs = Input::except('_token'); // all inputs without _token hidden field

验证这些输入然后插入如下:

Customer::create($inputs);

或者,如果unset($inputs['key'])数组中有其他值,并且想要将$_post之前的字段删除到数据库表中,则可以使用inserting/creating从数组中删除任何项目。阅读Mass Assignment

答案 1 :(得分:1)

使用sheika建议的可填充数组,并确保输入参数与模型属性匹配。这就是它通常所寻找的。

$model = Customer::create( Input::get() );

或者

$model = new Customer;
$model->fill( Input::get() );
$model->save();