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();,否则,它将不会尝试保存,但该模型应该可供您在表单中使用.