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


Laravel 4 database actions - controller or model

刚开始使用Laravel,但想确保我正确使用它。

我的大部分工作都是基于CMS的,因此可以读取/写入/更新等数据库。

到目前为止,我所做的一个例子是插入数据库:

在视图上,我有一个URL为"addNewUser"的表单。

在我的路线中,我然后做:

Route::post('addnewuser', array('uses' => 'UserController@addNewUser'));

我的用户控制器"addNewUser"方法是(简化):

public function addNewUser() {
    $data = Input::all();
    $rules = array(
        'username' => 'required|alpha_dash|max:16|unique:users,username',
        );
    $validator = Validator::make($data, $rules, $messages);
    if ($validator->fails())
    {
        Input::flash();
        $errors = $validator->messages();
        return Redirect::to('/register')->withErrors($validator)->withInput();
    }
    $user = new User;
    $user->save();
    return Redirect::to('/login')->with('successLogin', '1');
}

这是对的吗?我在某处读到所有数据库交互都应该在模型中?

同样,例如,当从数据库读取以显示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变量和运行$user->save();之间应该有$user->username = $data['username'];等,所以如果您故意排除了这一点,那么我看不到您的模型的其他内容。

在您的视图代码中,$builds = DB::table('blogs')->orderBy('id', 'desc')->get();应该在您的控制器中完成并传递到您的视图,就像这样return View::make('example', array('builds' => $builds))

我也会改变

$builds = DB::table('blogs')->orderBy('id', 'desc')->get();

$builds = Blog::orderby('id','desc')->get();如果你有一个Blog模型,否则你的代码很好。

你可以移动:

$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模型,你应该在这里使用:

$builds = Blog::orderBy('id', 'desc')->get();
return View::make('someview')->with('builds', $builds);

也不清楚以下代码的作用:

$safeURLSlug = stringHelpers::safeURLSlug($build->blogtitle);

但也许您可以将其移动到Blog模型中并使用 accessor 进行更改:

public function getSafeSlugAttribute($value) {
   return stringHelpers::safeURLSlug($this->blogtitle);
}

现在您的视图可能如下所示:

@foreach ($builds as $build)
      {{{ $build->title }}} {{{ $build->safeSlug }}}
@endforeach

我建议你看看Laravel发电机。

https://github.com/JeffreyWay/Laravel-4-Generators

安装然后运行:

php artisan generate:scaffold customer

Laravel线路命令生成器通过控制器,模型,视图和数据库迁移为您创建基本的CRUD。这有利于节省时间并将您的项目保留在某些默认组织中。