这是我如何分解控制器逻辑并在小到中等规模的项目中使用模型的方法。
1. 创建你的表和模型
这个命令将创建你的模型,而 --migration 参数将创建一个迁移文件,引用了 BluePrint 类,你可以使用它来创建你的模型表。
php artisan make:model UserLobbyInfo --migration
你似乎已经创建了一个数据库,所以你可能想要移除 --migration,除非你想使用它来使用 BluePrint 创建模式。我个人喜欢使用迁移。在 Laravel 5 中,你的模型将直接创建在 App 文件夹下。
2. 修改你的模型文件
你可以在 App 文件夹中找到你的模型文件。在你的模型中,你应该添加你将插入或更新的字段(批量填充项)和你的表名,如果它不遵循 Laravel 的约定(Laravel 假设驼峰表示不同的单词,并且你的表以 's' 结尾,所以它认为你的表将是 user_lobby_infos,在你的情况下,你的表名是 user_lobby_info)。这是我根据你上面查询的数据更新它的方式:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserLobbyInfo extends Model
{
protected $fillable = array('userid','lobby','typing');
protected $table = 'user_lobby_info';
}
如何使用您的模型
该模型现在具有从其扩展的Illuminate\Database\Eloquent\Model类提供的所有方法,因此您可以执行以下操作和更多操作:
//To query all content:
$index = UserLobbyInfo::all();
//To query specific content:
$userLobby = UserLobbyInfo::where('id', '=', 1)->first();
//Save things:
$userLobbyInfo = UserLobbyInfo::where('id', '=', 1)->first();
$userLobbyInfo->lobby = Request::get('lobbyid')
$userLobbyInfo->save();
//Using the model for your query above this is how you can send an update:
UserLobbyInfo::where('userid', '=', Auth::User()->id)
->where('lobby', '=', Request::get('lobbyid'))
->update([ 'typing' => $level ]);
3. 创建预先包含CRUD相关方法的控制器
这个命令将创建一个控制器,其中包含您在CRUD应用程序中通常使用的所有方法(Index,show,create,save,edit,update,delete)。
php artisan make:controller UserLobbyController --resource
在这些函数中,您需要添加相应的模型和所需方法。
4. 添加所有传统CRUD应用程序中使用的路由,并链接到--resource方法 如果您使用--resource,您将能够使用资源函数,该函数将为您提供所有所需资源的路由。
Route::resource('userlobby', 'UserLobbyController');
你路由文件中的这一行代码将为CRUD应用程序创建以下常见路由。运行 "php artisan route:list |grep userlobby" 命令,即可看到这些路由:
| | GET|HEAD | userlobby | userlobby.index | App\Http\Controllers\UserLobbyController@index | web |
| | POST | userlobby | userlobby.store | App\Http\Controllers\UserLobbyController@store | web |
| | GET|HEAD | userlobby/create | userlobby.create | App\Http\Controllers\UserLobbyController@create | web |
| | GET|HEAD | userlobby/{userlobby} | userlobby.show | App\Http\Controllers\UserLobbyController@show | web |
| | PUT|PATCH | userlobby/{userlobby} | userlobby.update | App\Http\Controllers\UserLobbyController@update | web |
| | DELETE | userlobby/{userlobby} | userlobby.destroy | App\Http\Controllers\UserLobbyController@destroy | web |
| | GET|HEAD | userlobby/{userlobby}/edit | userlobby.edit | App\Http\Controllers\UserLobbyController@edit | web |
5. 将您的控制器压缩为CRUD方法
由于这可能会变得很冗长,因此我将仅提供以下编辑和更新方法。希望这能让您了解如何分解控制器:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\UserLobbyInfo;
use App\Http\Requests;
class UserLobbyController extends Controller
{
public function edit($id)
{
$updateLobby = UserLobbyInfo::where('id', '=', $id)->first();
return view('lobbies.edit', compact('updateLobby'));
}
public function update(Request $request, $id)
{
$userLobby = UserLobbyInfo::where('userid', '=', Auth::User()->id)
->where('lobby', '=', $request->lobbyid)->first();
$updateLobby->typing = $level;
$updateLobby->save();
}
对于更复杂的应用程序,我通常会将较重的控制器逻辑迁移到一个类中,并在控制器中使用该类引用。仅当我编写具有多个表连接的复杂查询(尤其是需要在该连接中使用多个where子句的连接)时,才使用DB::类。希望这可以帮助您了解如何在Laravel中正确使用模型。许多信息都可以在Laravel文档中找到。我还喜欢这个速查表:
laravel cheatsheet。如果您有更多问题或者我没有完全回答您的问题,只需让我知道即可。
user_lobby_info
是一个数据透视表吗? - Rwd