Php Laravel 4数据库操作-控制器或模型

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交互都应

刚开始使用Laravel,但希望确保我正确使用它

我的大部分工作都是基于CMS的,所以对数据库进行读/写/更新等

到目前为止,我所做的一个例子是在DB中插入:

在视图中,我有一个URL为“addNewUser”的表单

在我的路线中,我会:

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