簡體   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