您是否可以使用Laravel 5填充Eloquent模型而无需在数据库中创建条目

Sty*_*hon 2 php laravel eloquent laravel-5

当我添加或编辑我的数据库表网站的条目时,我加载要修改的网站实例(或用于创建网站的空白实例).这很棒,这是我的控制器:

<?php namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Request;
use App\Models\User;
use App\Models\Status;
use App\Models\Website;

class WebsitesController extends Controller {

    /**
     * Show / Process the create website form to the user.
     *
     * @return Response
     */
    public function create()
    {
        $statuses = Status::all();
        $users = User::all();
        $website = Website::find(0);
        return view('admin/websites/create', [
            'statuses' => $statuses,
            'users' => $users,
            'website' => $website
        ]);
    }

    public function update($id)
    {
        $statuses = Status::all();
        $users = User::all();
        $website = Website::findOrFail($id);
        return view('admin/websites/update', [
            'statuses' => $statuses,
            'users' => $users,
            'website' => $website
        ]);
    }

}
Run Code Online (Sandbox Code Playgroud)

问题是当我提交表单时出现错误.用户返回到页面并显示错误.我还传回用户输入,以便我可以用他们输入的内容重新填充表单.但是,如果它存在而没有实际保存到数据库中,如何用输入中的值替换网站中的值?我整天都在玩这个,但没找到合适的解决方案.

我的create方法是这样的:

public function postCreate(Request $request)
{
    $v = Validator::make($request->all(), Website::rules());
    if ($v->fails())
    {
        return redirect()->back()->withInput()->withErrors($v);
    }
    $website = Website::create($request->all());
    return redirect()->action('Admin\HomeController@index')->with('messages', [['text' => 'Website created', 'class' => 'alert-success']]);
}
Run Code Online (Sandbox Code Playgroud)

我将输入传递回原始表单,但表单从网站Eloquent模型填充其值.**如何从获得输入$request->all()$website

我尝试过使用fill(),但我只是Call to a member function fill() on null在创建函数中使用它时得到.

Don*_*nic 12

create方法尝试将记录插入数据库,并在成功时返回模型的实例.如果使用create()无效值,则插入将失败.我认为这就是为什么有一个null模型的实例而不是一个实例导致你的错误:

在null上调用成员函数fill()

而不是使用create()您可以创建网站模型而不使用数据库插入

$website = new Website;
$website->fill($request->all());
Run Code Online (Sandbox Code Playgroud)

在运行验证之前.如果验证通过,那么您可以插入到您的数据库$website->save();,否则,它将不会尝试保存,但该模型应该可供您在表单中使用.