laravel框架知识点操作数据库(增删改查)

laravel框架

1.1数据库迁移

配置数据库连接

首先在.env中配置数据库连接信息

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=news  //自己的数据的名字
DB_USERNAME=root
DB_PASSWORD=root

创建数据库迁移文件

运行如下命令,创建数据库迁移文件

php artisan make:migration create_post_table //(名字可以直接起)

编辑数据库迁移文件

 public function up()
    {
        Schema::create('post', function (Blueprint $table) {
            $table->increments('id');
            $table->string("title")->default('');
            $table->string("content")->default('');
            $table->timestamps();
        });
    }
运行数据库迁移文件

运行如下命令,执行数据库迁移文件

php artisan migrate

可能会出现如下的错误提示
在这里插入图片描述
错误原因在于laravel框架赋予字段你的默认长度超过了mysql数据库允许的字段的最大长度,解决方法是设置 laravel 框架中字段的默认长度不要超过mysql 的长度
在 app\providers 目录下的 AppServiceProvider 文件中的 boot 函数中,加入如下代码

public function boot()
//设置字段默认长度
Schema::defaultStringLength(200);

重新运行如下的命令

php artisan migrate

错误提示

SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists

原因在于数据库中已经存在响应的表了,删除这些表,然后重新执行数据库迁移文件

在这里插入图片描述
如何添加新的字段
现在想为Post表添加一个字段

public function up()
{
	Schema::create('post',function(Blueprint $table){
	$table->increments('id');
	$table->string('title')->default;
	$table->string('content')->default;
	$table->increments('user_id')->default(0);
	$table->timestamps();
});
}

代码修改好后,重新运行数据库迁移

php artisan migrate

提示没有迁移任何内容
解决方案是在数据库中删除 post 表,并将 migrations 表中的对应数据删除,然后重新运行数据库迁移即可

在创建新的表
php artisan make::migration post_type_table

修改数据库迁移文件

class PostTypeTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('post_type', function (Blueprint $table) {
            $table->increments('id');
            $table->string("title")->default('');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('post_type');
    }
}

执行数据库迁移

php artisan migrate

1.2总结步骤

创建数据库

news

配置数据库连接信息

.env 中配置

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=news
DB_USERNAME=root
DB_PASSWORD=root

创建数据库迁移文件

 public function up()
    {
        // 创建数据库
        Schema::create('post', function (Blueprint $table) {
            // 创建 id 字段,并设置为主键,且自动增长
            $table->increments('id');
            // 创建title字段,类型为varchar类型,长度100,且默认值为空字符串
            $table->string('title',100)->default('');
            $table->string('content')->default('');
            $table->integer('user_id')->default(0);
            $table->timestamps();
        });
    }

设置默认长度

\App\Providers\AppServiceProvder.php 中设置

 public function boot()
    {
        // 设置字段默认长度
        Schema::defaultStringLength(200);
    }

运行数据库迁移

 php artisan migrate

1.3 展示文章新闻

创建模型

php artisan make:model Post

创建控制器

php artisan make:controller PostController

编写控制器中的index方法

// 展示文章列表
public function index()
{
    $posts=Post::all();
    return view('post/index',['posts'=>$posts]);
}

配置路由

use Illuminate\Support\Facades\Route;

Route::get('/posts','\App\HttP\Controllers\PostController@index');

创建视图

在 views 目录下创建 post 目录,然后再post目录下创建 index.blade.php 文件

<div class="container">
<a href="/posts/add">添加文章</a>

<h2>文章列表</h2>
<table class="table">
<tr>
  <th>编号</th>
  <th>标题</th>
  <th>内容</th>
  <th>创建时间</th>
  <th>操作</th>
</tr>
@foreach($posts as $item)
<tr>
  <td>{{$item->id}}</td>
  <td>{{$item->title}}</td>
  <td>{{$item->content}}</td>
  <td>{{$item->created_at}}</td>
  <td>
  <a href="" class="btn btn-info">编辑</a>
  <a href="" class="btn btn-danger">删除</a>
  </td>
</tr>

@endforeach
</table>
</div>

1.4新增数据

注意:以后新增数据要分两个方法进行,一个方法用于展示新增数据的视图;一个方法用于将表达数据源保存到数据库中

add方法

此方法用于展示新增数据的视图

// 展示添加文章的界面
public function add(){
    return view('post/add');
}

配置路由

// 展示用于添加文章的界面
Route::get('/posts/add','\App\HttP\Controllers\PostController@add');

创建视图add

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  <style>
  .box{
    margin-top: 100px;
  }
  
  </style>
</head>
<body>
<div class="container box">
<form action="/posts" method="post" class="form-horizontal">
  <div class="form-group">
    <label for="title" class="col-sm-2 control-label">标题</label>
    <div class="col-sm-10">
      <input type="text" name="title" id="title" class="form-control">
    </div>
  </div>
  <div class="form-group">
    <label for="content" class="col-sm-2 control-label">内容</label>
    <div class="col-sm-10">
    <textarea class="form-control" name="content" id="content" rows="3"></textarea>
    </div>
  </div>
  <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
      <button type="submit" class="btn btn-default">保 存</button>
    </div>
  </div>
</form>
</div>

</body>
</html>

store方法

此方法用于新增数据

// 新增文章
    public function store(){
        return 'store';
    }

配置路由

// 新增文章数据
Route::post('/posts','\App\HttP\Controllers\PostController@stroe');

CSRF

表单中数据如数据,点击保存后,会出现如下错误

mark

解决方案,在新增文章的表单中,加入如下代码

mark

解释:

CSRF:跨站请求伪造,是一种利用服务器对客户端的信任,发起攻击方式

然后修改 store 方法代码,实现新增数据

public function store()
{
$model = new Post();
$model->title = request(‘title’);
$model->content = request(‘content’);
$res = m o d e l − > s a v e ( ) ; i f ( model->save(); if ( model>save();if(res) {
return redirect(’/posts’);
} else {
return redirect(’/posts/add’);
}
}
7.5 编辑文章
两个方法

展示待编辑ide数据
更新数据
展示待编辑数据

创建 edite 方法

// 展示待编辑的数据
public function edite(Post KaTeX parse error: Expected '}', got 'EOF' at end of input: …dite',['post'=>post]);
}
配置路由

// 展示待编辑数据
Route::get(’/posts/{post}/edite’,’\App\HttP\Controllers\PostController@edite’);
更新 index 视图

mark

创建 edite 视图

直接将 add 视图拷贝过来,为表单控件设置 value 属性即可

Document
{{csrf_field()}}
{{$post->content}}
保 存

更新数据

请求方式:

get:获取数据
post:新增数据
put:更新数据
delete:删除数据
通过form 的 method 属性只能设置 get 和 post 请求,如果设置 put 和 delete 请求

如果确实想发送 put 或者 delete 请求,需要使用表单伪造的方式

mark

创建 update 方法

// 更新数据
public function update(){
$id=request(‘id’);
m o d e l = P o s t : : f i n d ( model=Post::find( model=Post::find(id);
$model->title=request(‘title’);
$model->content=request(‘content’);
r e s = res= res=model->save();
if (KaTeX parse error: Expected '}', got 'EOF' at end of input: …rect('/posts/'.id.’/edite’);
}

}

配置路由

// 更新文章数据
Route::put(’/posts’,’\App\HttP\Controllers\PostController@update’);
7.6 删除文章信息
创建方法

// 删除文章数据
public function delete(Post $post)
{
$res = $post->delete();
return redirect(’/posts’);

    // $model=Post::find($post);
    // $model->delete();
}

配置路由

// 删除数据
Route::get(’/posts/{post}/delete’,’\App\HttP\Controllers\PostController@delete’);
修改 index.blade.php 中的 删除 按钮

mark

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值