Php Laravel 4数据库操作-控制器或模型
刚开始使用Laravel,但希望确保我正确使用它 我的大部分工作都是基于CMS的,所以对数据库进行读/写/更新等 到目前为止,我所做的一个例子是在DB中插入: 在视图中,我有一个URL为“addNewUser”的表单 在我的路线中,我会:Php Laravel 4数据库操作-控制器或模型,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,刚开始使用Laravel,但希望确保我正确使用它 我的大部分工作都是基于CMS的,所以对数据库进行读/写/更新等 到目前为止,我所做的一个例子是在DB中插入: 在视图中,我有一个URL为“addNewUser”的表单 在我的路线中,我会: Route::post('addnewuser', array('uses' => 'UserController@addNewUser')); 我的用户控制器“addNewUser”方法为(简化): 这是正确的吗?我在某个地方读到过,所有DB交互都应
Route::post('addnewuser', array('uses' => 'UserController@addNewUser'));
我的用户控制器“addNewUser”方法为(简化):
这是正确的吗?我在某个地方读到过,所有DB交互都应该在模型中
类似地,例如,当从DB读取以显示foreach时,我直接在视图中执行以下操作:
$builds = DB::table('blogs')->orderBy('id', 'desc')->get();
if ($builds) {
foreach ($builds as $build)
{
$safeURLSlug = stringHelpers::safeURLSlug($build->blogtitle);
echo "
// stuff
";
}
} else {
// no stuff
}
我应该直接在视图中执行这些类型的查询并显示数据吗?或在模型/控制器功能等中
在我太投入之前,想检查一下我所做的事情100%正确/标准的做事方式。我可以看到一些我个人会做得不同的事情 例如,我通常将
$rules
作为一个类变量,以便可以在与用户相关的不同函数中使用它
你测试过你的代码了吗?有错误吗
在addNewUser
函数中,它是否保存任何数据?我知道您已经在代码片段上面进行了“简化”,但是应该有$user->username=$data['username']代码>等。在创建$user
变量和运行$user->save()之间代码>,因此,如果您故意排除此项,那么我看不到您的模型中还有其他内容
在视图代码中,$builds=DB::table('blogs')->orderBy('id','desc')->get()代码>应该在您的控制器中完成,并像这样传递给视图返回视图::make('example',array('builds'=>$builds))
我也会改变
$builds=DB::table('blogs')->orderBy('id','desc')->get()代码>
到
$builds=Blog::orderby('id','desc')->get()代码>如果你有一个博客
模型,否则你的代码就可以了 您可以移动:
$rules = array(
'username' => 'required|alpha_dash|max:16|unique:users,username',
);
将用户模型作为静态变量,而不是:
$validator = Validator::make($data, $rules, $messages);
您可以使用:
$validator = Validator::make($data, User::$rules, $messages);
但您绝对不应该从视图中的数据库中获取数据,此代码应该在控制器中,例如:
$builds = DB::table('blogs')->orderBy('id', 'desc')->get();
return View::make('someview')->with('builds', $builds);
当然,如果您有Blog
model,您应该在这里使用:
$builds = Blog::orderBy('id', 'desc')->get();
return View::make('someview')->with('builds', $builds);
还不清楚以下代码的作用:
$safeURLSlug = stringHelpers::safeURLSlug($build->blogtitle);
但您可能可以将其移动到您的博客
模型中,并使用进行更改:
public function getSafeSlugAttribute($value) {
return stringHelpers::safeURLSlug($this->blogtitle);
}
现在,您的视图可以如下所示:
@foreach ($builds as $build)
{{{ $build->title }}} {{{ $build->safeSlug }}}
@endforeach
我建议你看看拉威尔发电机
安装并运行:
php artisan generate:scaffold customer
Laravel line命令生成器使用控制器、模型、视图和数据库迁移为您创建基本CRUD。这有助于确保时间安全,并将项目保留在默认组织中 不,如果希望代码可重用,则不应在控制器中执行。想象一下,你有另一个添加用户的理由,例如,/users/add_batch
,那么你需要为这个新控制器重写所有这些内容。或者您希望在命令行中执行此操作(artisan cron作业或其他任何操作)-您需要再次重写这些内容。相反,最好在模型上创建一个服务和一个方法(无论什么适合您),它将处理这项任务,并在控制器/cli中重用它。好的,我慢慢了解情况。我仍然应该在控制器中执行保存/验证等操作,但在模型中定义规则?@user2921557好吧,您不需要在控制器中进行验证,您使用“Validator”模型,并且正在该模型中进行验证,您只需要在控制器中对其结果执行一些操作。当然,您也可以在模型中创建单独的方法进行验证——例如,在我当前的项目中,我有validatedit、validatedd方法,因为我需要根据操作或其他数据使用不同的验证规则
php artisan generate:scaffold customer