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

时间:2014-12-02 16:05:21

标签: php laravel laravel-4 eloquent

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

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

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

在视图中,我有一个表格,网址为' 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');
}

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

同样,当从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%正确/标准做事方式。

3 个答案:

答案 0 :(得分:1)

我可以看到一些我个人会做的事情。

例如,我通常将$rules作为类变量,因此可以在与用户相关的不同功能中使用。

您是否测试了代码?有错误吗?

addNewUser功能中,它会保存所有数据吗?我知道你已经简化了#34;在代码段上方,但在创建$user->username = $data['username'];变量和运行$user之间应该有$user->save();等,所以如果您故意将其排除在外,那么我就看不到任何其他内容与你的模型。

在您的视图代码中,$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型号,否则您的代码就可以了。

答案 1 :(得分:1)

你可以搬家:

$rules = array(
        'username' => 'required|alpha_dash|max:16|unique:users,username',
        );

将用户模型作为静态变量,而不是:

$validator = Validator::make($data, $rules, $messages);

你可以使用:

 $validator = Validator::make($data, User::$rules, $messages);

但是你绝对不应该在View中从数据库获取数据,这段代码应该在控制器中,例如:

$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

答案 2 :(得分:0)

我建议你看看Laravel Generators。

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

安装然后运行:

php artisan generate:scaffold customer

Laravel line命令生成器为您创建一个基本的CRUD,包括控制器,模型,视图和数据库迁移。这对安全时间有好处,并使您的项目与某个默认组织保持一致。