
如果你的数据库自动分的,那么任何客户端驱动都没有必要去管它。如果是手工分的,那么不就是访问不同的库、不同的表嘛。
还是要搞清楚前一个问题:你怎样分。这个不清楚,就等于是在给自己“下套”了,在不知道分库分表的具体含义时来问这个时髦概念如何用EF来实现,无的放矢了。
一、读/写连接
有时您可能希望使用一个SELECT语句的数据库连接,,另一个用于插入、更新和删除语句。Laravel使这微风,将始终使用正确的连接是否使用原始查询,查询生成器或雄辩的ORM。
如何读/写连接应该配置,让我们看看这个例子:
复制代码 代码如下:
'mysql' => array('read' => array('host' => '19216811'),'write' => array('host' => '19616812'),'driver' => 'mysql','database' =>'database','username' => 'root','password' => '','charset' => 'utf8','collation' => 'utf8_unicode_ci','prefix' => '')
注意,两个键添加到配置阵列:读和写。这两个键有数组值包含一个关键:主机。其余的读写数据库选项从主mysql连接将合并后的数组。所以,我们只需要将物品放入读取和写入数组如果我们希望覆盖主要数组中的值。所以,在这种情况下,19216811将被用作“读”连接,while19216812将被用作“写”连接。数据库凭证、前缀、字符集和所有其他选项在主mysql数组将跨两个共享连接。
二、运行查询
一旦你已经配置了数据库连接,你可以使用DB运行查询类。
运行一个Select查询
复制代码 代码如下:
$results = DB::select('select from users where id = ', array(1));
结果的选择方法总是返回一个数组。
运行一个Insert语句
复制代码 代码如下:
DB::insert('insert into users (id, name) values (, )', array(1, 'Dayle'));
运行一个更新语句
复制代码 代码如下:
DB::update('update users set votes = 100 where name = ', array('John'));
运行一个Delete语句
复制代码 代码如下:
DB::delete('delete from users');
注意:update和delete语句返回的行数的影响 *** 作。
运行一个通用声明
复制代码 代码如下:
DB::statement('drop table users');
查询事件监听
你可以查询事件监听使用DB::听方法:
复制代码 代码如下:
DB::listen(function($sql, $bindings, $time){ //});
三、数据库事务
运行在一个数据库事务的一组 *** 作,您可以使用事务方法:
复制代码 代码如下:
DB::transaction(function(){ DB::table('users')->update(array('votes'
=> 1)); DB::table('posts')->delete();});
注意:在事务抛出的任何异常关闭将导致自动事务将回滚
有时你可能需要开始一个事务:
复制代码 代码如下:
DB::beginTransaction();
你可以通过回滚事务回滚方法:
复制代码 代码如下:
DB::rollback();
最后,您可以通过提交方法:提交一个事务
复制代码 代码如下:
DB::commit();
四、访问连接
当使用多个连接,你可以访问它们通过DB::连接方法:
复制代码 代码如下:
$users = DB::connection('foo')->select();
你也可以访问原始的、潜在的PDO实例:
复制代码 代码如下:
$pdo = DB::connection()->getPdo();
有时你可能需要重新连接到一个给定的数据库:
复制代码 代码如下:
DB::reconnect('foo');
如果你需要断开从给定的数据库将超过底层PDO实例'smax_connections限制,使用断开连接方法:
复制代码 代码如下:
DB::disconnect('foo');
五、查询日志
默认情况下,Laravel日志保存在内存的所有查询运行当前的请求。然而,在某些情况下,例如当插入的行数,这可能会导致应用程序使用多余的内存。禁用日志,你可以使用disableQueryLog方法:
复制代码 代码如下:
DB::connection()->disableQueryLog();
o得到一组执行的查询,您可以使用getQueryLog方法:
复制代码 代码如下:
$queries = DB::getQueryLog();
Laravel框架中的DB类让我们可以方便的进行数据库 *** 作,比如常见的query查询:
DB::query('SELECT FROM users');
Larvel还提供了类似CI框架中Active Record的Fluent Query Builder : DB::table('user')->where('id','=','1')->get();
虽然从 *** 作上和普通查询相差不大,但是需要注意到是Laravel的查询结果和原生查询不同。
简单建立一个contents表测试下,表里有content字段,我们查询一下:
$content = DB::table('contents')->where('id','=','1')->get();
最后打印一下$content变量看看有什么不同:
array(1)
{
[0]=> object(stdClass)#31 (1) {
["content"]=> string(24) "这是一个测试~~" }
}
从上面可以知道查询的结果是一个包含对象的数组,因此我们要取得content值就必须先迭代:
foreach($contents as $content)
{ echo $content->content;
}
总体来说Laravel的数据库 *** 作很容易上手。
首先确认,后台的用户表,我设计表叫做badmin,每个管理员有用户名(username),有昵称(nickname),有邮箱(email),有密码(password)
这里玩个花,使用laravel的migration来建立表(实际上可以用不着使用这个工具建立表)
1 安装好最基本的laravel框架
2 创建migration文件:
/artisan migrate:make create-badmin-table
3 发现app/database/migration/下面多了一个php文件:
2014_10_19_090336_create-badmin-tablephp
4 往up和down里面增加内容;
<php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateBadminTable extends Migration {
/
Run the migrations
@return void
/
public function up()
{
Schema::create(‘badmin', function($table)
{
$table->increments('id’);
$table->string(‘nickname', 100)->unique();
$table->string('username', 100)->unique();
$table->string('email', 100)->unique();
$table->string('password', 64);
$table->timestamps();
});
}
/
Reverse the migrations
@return void
/
public function down()
{
Schema::drop('badmin’);
}
}
5 配置好local的database,app/config/local/databasephp
<php
return array(
'fetch' => PDO::FETCH_CLASS,
'default' => 'mysql',
'connections' => array(
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'test',
'username' => 'yejianfeng',
'password' => '123456',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
),
),
'migrations' => 'migrations',
);
6 创建数据表:
/artisan migrate --env=local
这个时候去数据库看,就发现多了一张badmin表,数据结构如下:
CREATE TABLE ——badmin—— (
——id—— int(10) unsigned NOT NULL AUTO_INCREMENT,
——nickname—— varchar(100) COLLATE utf8_unicode_ci NOT NULL,
——username—— varchar(100) COLLATE utf8_unicode_ci NOT NULL,
——email—— varchar(100) COLLATE utf8_unicode_ci NOT NULL,
——password—— varchar(64) COLLATE utf8_unicode_ci NOT NULL,
——created_at—— timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
——updated_at—— timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (——id——),
UNIQUE KEY ——badmin_nickname_unique—— (——nickname——),
UNIQUE KEY ——badmin_username_unique—— (——username——),
UNIQUE KEY ——badmin_email_unique—— (——email——)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
要问这里为什么多出了create_at和update_at,这是laravel默认为每个表创建的字段,而且在使用Eloquent进行增删改查的时候能自动更新这两个字段
7 创建个Model:
<php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class Badmin extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
protected $table = 'badmin';
protected $hidden = array(‘password’);
public static $rules = [
'nickname' => 'require|alpha_num|min:2',
'username' => 'require',
'email'=>'required|email|unique:users',
'password'=>'required|alpha_num|between:6,12|confirmed',
];
}
这里必须要implements UserInterface和RemindableInterface
8 把model和Auth关联上,修改app/config/authphp
<php
return array(
// 默认的用户验证驱动
// 可以是database或者eloquent
'driver' => 'eloquent',
// 只有驱动为eloquent的时候才有用
'model' => 'Badmin',
);
这里的driver可以是eloquent或者database,使用eloquent就告诉Auth组件说,用户认证类是Badmin这个类管的。这里的model是有命名空间的,就是说如果你的admin类是\Yejianfeng\Badmin,这里就应该改成‘\Yejianfeng\Badmin'
9 好了,这个时间其实逻辑部分已经搭建完毕了,你已经可以在controller种使用
Auth::attempt(XXX) 做权限认证
Auth::user() 获取登录用户(一个Badmin类)
等。
10 下面要建立一个用户登录页面:
11 设置路由:
<php
// 不需要登录验证的接口
Route::get('/', ['as' => 'userlogin','uses'=>'UserController@getLogin']);
Route::get('user/login', ['as' => 'login', 'uses' => 'UserController@getLogin']);
Route::post('user/login', ['as' => 'login', 'uses' => 'UserController@postLogin']);
// 需要登录验证才能 *** 作的接口
Route::group(array('before' => 'auth’), function()
{
Route::get(‘user/logout', ['as' => 'logout', 'uses' => 'UserController@getLogout']);
Route::get('user/dashboard', ['as' => 'dashboard', 'uses' => 'UserController@getDashboard']);
});
12 设置controller:
<php
class UserController extends BaseController {
// 登录页面
public function getLogin()
{
return View::make('userlogin’);
}
// 登录 *** 作
public function postLogin()
{
if (Auth::attempt(array(‘email'=>Input::get('email’), 'password'=>Input::get(‘password’)))) {
return Redirect::to(‘user/dashboard’)
->with(‘message', ’成功登录‘);
} else {
return Redirect::to('user/login’)
->with(‘message', ’用户名密码不正确‘)
->withInput();
}
}
// 登出
public function getLogout()
{
Auth::logout();
return Redirect::to('user/login’);
}
public function getDashboard()
{
return View::make(‘userdashboard’);
}
// 添加新用户 *** 作
public function getCreate()
{
return View::make(‘usercreate’);
}
// 添加新用户 *** 作
public function postCreate()
{
$validator = Validator::make(Input::all(), User::$rules);
if ($validator->passes()){
$bAdmin = new Badmin();
$bAdmin->nickname = Input::get(‘nickname’);
$bAdmin->username = Input::get(‘username’);
$bAdmin->email = Input::get(‘email’);
$user->password = Hash::make(Input::get(‘password’));
$user->save();
Response::json(null);
} else {
Response::json(['message' => ‘注册失败'], 410);
}
}
}
13 设置下filter,app/filterphp
Route::filter('auth', function()
{
if (Auth::guest())
{
if (Request::ajax())
{
return Response::make('Unauthorized', 401);
}
else
{
return Redirect::guest('/’);
}
}
});
将这里认证失败后的地址转到/ 路径
14 设置views/user/loginbladephp
以上就是关于laravel 分库分表程序应该怎么写,框架有全部的内容,包括:laravel 分库分表程序应该怎么写,框架有、laravel *** 作数据库需要判断是否成功吗、laravel 怎么用原生态的mysql查询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)