繁体   English   中英

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用作类变量,以便可以在与您的Users相关的不同功能中使用它。

您已经测试过代码了吗? 有什么错误吗?

在您的addNewUser函数中,它是否保存任何数据? 我知道您已经在代码段上方“简化了”,但是应该有$user->username = $data['username']; 在创建$user变量和运行$user->save();等等$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模型,则您的代码很好。

您可以移动:

$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

我建议您看一下Laravel Generators。

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

安装并运行:

php artisan generate:scaffold customer

Laravel行命令生成器通过控制器,模型,视图和数据库迁移为您创建基本的CRUD。 这样可以确保安全的时间,并让您的项目使用默认的组织机构。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM