[英]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.