精华内容
下载资源
问答
  • laravel实现操作数据库

    2019-12-08 21:28:18
    1.1数据库迁移 配置数据库连接 先在.env文件中配置数据库连接信息 DB_CONNECTION=mysql DB_HOST= //自己的本机地址 DB_PORT=3306 //端口号 DB_DATABASE= //自己的数据库名称 DB_USERNAME= //自己的用户名 DB_...

    1.1数据库迁移

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

    DB_CONNECTION=mysql
    DB_HOST= //自己的本机地址
    DB_PORT=3306  //端口号
    DB_DATABASE=  //自己的数据库名称
    DB_USERNAME=  //自己的用户名
    DB_PASSWORD=  //自己的密码

    创建数据库迁移文件
    在自己下载的文件中,shift+右键 在此处打开窗口
    输入下面的命令,创建数据库迁移文件

    php artisan make:migration create_post_table //其中post是自己想要创建表的名称

    database文件中找到migrations,打开里面新创的PHP文件
    更改里面的up方法,改成:

    public function up(){
    	Schema::create('post',function(Blueprint $table){
    	$table->increments('id');
    	$table-String('想要创建的字段名')->default('');
    	$table->timestamps();
    	//increments是将id设成主键,自动增长
    	//String相当于数据表中的varchar
    	//default设置默认值
    })
    }

    然后在app\providers目录下的AppServiceProvider文件中的boot函数中,设置字段的默认长度
    先引入

    use Illuminate\Support\Facades\Schema;
    public function boot(){
    	//设置字段默认长度
    	Schema::defaultStringLength(长度);
    
    }

    然后运行如下命令

    php artisan migrate

    如果想要添加新字段的话
    在下面添加

    $table->String('字段名')->default('');
    //相加几个字段就写几个

    在这里插入图片描述
    然后删掉数据库中对应名称表,和migrations表中对应的数据。从新运行

    php artisan make:migration post_post_table

    7.3展示文章新闻

    创建模型
    一定要先创建Post模型

    php artisan make::model Post

    会自动在app文件里面创建一个post.php文件
    创建控制器

    php artisan make::controller PostController

    会自动在app/http创建一个PostController.php文件
    编写控制器中的index方法
    先引用App\Post

    use App\Post

    要不然会报找不到变量post。

    //展示文章列表
    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');

    创建视图
    在resources/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>

    7.4新增数据

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

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

    配置路由

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

    创建视图 add.blade.php
    写入内容

    <!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">
    {{csrf_field()}}  //本行代码很重要
      <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@store');

    修改store方法,实现新增

     public function store()
        {
            $model = new Post();
            $model->title = request('title');
            $model->content = request('content');
            $res = $model->save();
            if ($res) {
                return redirect('/posts');
            } else {
                return redirect('/posts/add');
            }
        }

    7.5编辑文章

    展示待编辑数据
    创建edite()方法

     // 展示待编辑的数据
        public function edite(Post $post){
            return view('post/edite',['post'=>$post]);
        }

    配置路由

    // 展示待编辑数据
    Route::get('/posts/{post}/edite','\App\HttP\Controllers\PostController@edite');

    更新index视图中的编辑的a标签
    更新为

    <a href="/posts/{{$v->id}}/edite" class="btn btn-info">编辑</a>

    创建edite视图

    <!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">
    {{csrf_field()}}
      <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" value="{{$post->title}}">
        </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">
    {{$post->content}}
        </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>

    更新数据
    请求方式:

    • get:获取数据
    • post:新增数据
    • put:更新数据
    • delete:删除数据
      通过form 的 method 属性只能设置 get 和 post 请求,如果设置 put 和 delete 请求如果确实想发送 put 或者 delete 请求,需要使用表单伪造的方式
      新增
    <input type="hidden" name="_method" value="PUT">

    创建update方法

    // 更新数据
        public function update(){
            $id=request('id');
            $model=Post::find($id);
            $model->title=request('title');
            $model->content=request('content');
            $res=$model->save();
            if ($res) {
                return redirect('/posts');
            } else {
                return redirect('/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 中的 删除 按钮

    <a href="/posts/{{$v->id}}/delete" class="btn btn-danger" onclick="return confirm('确定要删除吗?')">删除</a>
    展开全文
  • 主要介绍了laravel框架模型数据库基础操作,结合实例形式详细分析了laravel框架模型的定义及数据库的增删改查等相关操作技巧,需要的朋友可以参考下
  • [laravel] laravel数据库配置 找到程序目录结构下.env文件 配置基本的数据库连接信息 DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog DB_USERNAME=root DB_PASSWORD=root 修改完.env文件需要重启服务 ...

    [laravel] laravel的数据库配置

    找到程序目录结构下.env文件

    配置基本的数据库连接信息

    DB_HOST=127.0.0.1

    DB_PORT=3306

    DB_DATABASE=blog

    DB_USERNAME=root

    DB_PASSWORD=root

    修改完.env文件需要重启服务

     

     

    [laravel] laravel的数据库入门

     

    控制器中导入DB数据库操作类,use DB

    使用DB类的静态方法select来查询数据库,DB::select(),参数:sql语句,参数值数组

    例如:$user=DB::select("select * from article where id=?",array("1"));

    获取到一个数组,数组中的每一个结果是一个StdClass对象

     

    <?php
    namespace App\Http\Controllers\Index;
    use App\Http\Controllers\Controller;
    use DB;
    class IndexController extends Controller{
        public function index(){
            $data=array();
            $data['title']="Index控制器";
    
            // 第一种
            $user=DB::select("select * from article where id=?",array("1"));
            foreach ($user as $v) {
                echo $v->title;
            }
            // 第二种
            $users=DB::table("article")->get();
            foreach ($user as $v) {
                echo $v->title;
            }
            return view("index.index",$data);
        }
    }

     

    使用查询构造器

    使用DB::table(),得到查询构造器对象,参数:表名

    调用Builder对象的get()方法,得到数组数据

    例如:$users=DB::table("article")->get();

    查询构造器是链式调用的,还有其他方法,可以去查看文档

     

    [laravel] 数据库的迁移

     

    使用Artisan命令创建迁移,make:migration 名称 –create 表名

    例如:php artisan make:migration create_users_table --create=users

    此命令会在database/migrations目录下面创建一个迁移文件

     

    打开生成的迁移文件,在up方法里面进行字段的创建,这里会用到数据库的结构构造器Schema

     

    运行迁移命令,使用命令 php artisan migrate,会在数据库中自动创建表

     

     

     

    [laravel] Eloquent模型

     

    使用Eloquent模型为表建立映射模型ORM,使用Artisan命令 make:model 模型名称

    例如:php artisan make:model User

    在app目录下生成一个User.php的模型文件

    展开全文
  • 以上是进行laravel框架数据库的配置 红框表示的是,数据库的表名 2.模型 <1>定义的位置 <2>模型的命名 laravel框架对于模型的定义没有很严格,表名(首字母大写).php的形式 注意:模型名要与数据库中...

    1.数据库所在的文件是.env
    在这里插入图片描述
    以上是进行laravel框架数据库的配置
    红框表示的是,数据库的表名
    2.模型
    <1>定义的位置在这里插入图片描述
    在这里插入图片描述
    <2>模型的命名
    laravel框架对于模型的定义没有很严格,表名(首字母大写).php的形式
    注意:模型名要与数据库中的表名要有关联
    且因为与数据库有关联所以可以不用分目录管理,每个表名就把其分开所以没有必要进行分目录管理
    <3>模型的创建
    通过命令行的形式创建
    php artisan make:model Member
    在这里插入图片描述
    在这里插入图片描述会创建如上模型,上面就是模型已创建成功
    <4>定义模型的注意事项
    在这里插入图片描述
    在这里插入图片描述
    3.DB类在控制器中的使用
    DB类是框架提供的一个数据库操作类,可以操作所有的数据库表
    步骤:
    引入DB类(use DB)
    在这里插入图片描述
    使用DB类 DB::table(表名)
    进行测试
    在这里插入图片描述
    输出结果
    在这里插入图片描述还可以用模型操作表格
    《1》.引入member类
    在这里插入图片描述
    《2》使用方法有两种
    <1>使用DB门面一样的操作方式,以调用静态方法为主的形式,该形式下模型不需要实例化,例如:
    Member:get()等价于DB::table(‘Member’)->get()
    <2>实例化模型然后再去使用类
    例如:$model=new Member();
    $model->get();
    两种方式的选择标准;
    1.如果是laravel框架自带的方法则任意选择
    2.如果是自己定义的方法,则选择第二种

    展开全文
  •  Laravel操作数据库有三种方式,一种是用DB类操作原生sql,一种是用构造器查询,还有一种是Laravel里独特的模型操作方式,即Eloquent ORM。前两种的操作方式可以参考:...

    一、背景

            Laravel操作数据库有三种方式,一种是用DB类操作原生sql,一种是用构造器查询,还有一种是Laravel里独特的模型操作方式,即Eloquent ORM。前两种的操作方式可以参考:https://blog.csdn.net/zls986992484/article/details/52824962,这篇博文也有总结Eloquent ORM,只是为了总结学习,写篇博文进行学习记录,如果看那篇博文感觉还有疑惑,可以回来看看这篇。

    二、准备工作

            在Laravel里,有一个工具artisan,使用这个工具可以执行很多自动化操作,当然,操作的内容也就是创建文件和生成文件里的格式代码等,所以也可以根据需要手动创建对应的文件。本篇文章都是用artisan工具进行操作。

    1. 配置数据库信息(已配置好的自动忽略)

            操作前,找到根目录下的 .env 文件配置好数据库连接信息。

    2.  配置模型管理

      为了方便文件统一管理,我们统一把模型文件放在/app/Models/文件夹下。

      注意:因为laravel5.5默认在app文件夹下有一个的User模型文件,如果有需要,可以再重新生成一个User模型文件在Models中,再更改一下/config/auth.php下的配置,更改如下:

        'providers' => [
            'users' => [
                'driver' => 'eloquent',
                'model' => App\Models\User::class,    // 此处更改为App\Models\User
            ],
     
            // 'users' => [
            //     'driver' => 'database',
            //     'table' => 'users',
            // ],
        ],

    3.  生成模型文件

      Windows系统下进入dos系统,跳转到项目根目录(linux直接跳转),执行以下命令在Models中生成一个User.php模型文件:

    php artisan make:model Models\User

      执行后的结果:

      

    4. 设置模型文件中的代码

    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    
    class User extends Model
    {
        protected $table         = 'users';		                // 为模型指定表名
        protected $primaryKey    = 'id';	                        // 默认情况下指定'id'作为表主键,也可以指定主键名
        protected $timestamps    = true; 	                        // 默认情况下,Eloquent 期望数据表中存在 created_at 和 updated_at 字段,设置false可以取消
        protected $dateFormat    = 'U'; 	                        // 定制时间戳的格式
        protected $fillable      = ['name', 'sex', 'age','pwd'];    // 定义允许添加、更新的字段白名单,不设置则无法添加数据
        protected $guarded       = ['id']; 			        // 定义不允许更新的字段黑名单
    }
    

    注意: 一般开发时,以上属性配置 $fillable 就行,如果有特殊需要,再配置其他属性就好。

    三、操作模型进行数据库操作

    1.  使用 artisan 工具创建user控制器,如下命令:

    php artisan make:controller Home/UserController

      在/app/Http/controllers/Home/文件夹下生成UserController.php:

      

      控制器打开有如下自动生成的代码:

    <?php
    
    namespace App\Http\Controllers\Home;
    
    use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;
    
    class UserController extends Controller
    {
        //
    }
    

    2. 引入模型类

    use App\Models\User;

    3. 使用 save方法 添加一条数据

    public function insert(Request $request)
    {
        // 获取数据
        $data = $request->validate([
            'name'  =>  'required',
            'pwd'   =>  'required',
            'sex'   =>  'required',
            'age'   =>  'required'
        ]);
        // 实例化模型
        $user = new User;
        $user->name = $data['name'];
        $user->pwd  = $data['pwd'];
        $user->sex  = $data['sex'];
        $user->age  = $data['age'];
        // 向数据库中插入一条记录,返回值为新增数据数组对象
        $result = $user->save(); 
    }
    

    4. 使用 create方法 添加一条数据

    public function insert(Request $request)
    {
        // 获取数据
        $data = $request->validate([
            'name'  =>  'required',
            'pwd'   =>  'required',
            'sex'   =>  'required',
            'age'   =>  'required'
        ]);
        // 向数据库中插入一条记录,返回值为新增数据数组对象
        return User::create($data);
    
        // 先判断当前插入数据是否存在,存在则查找存在的第一条数据返回,不存在则执行插入,返回新增
        return User::firstOrCreate($data);
    }
    

      PS:如果要批量添加数据,可以使用DB操作,如:

    DB::table('users')->insert([
        ['name'=>'test1', 'pwd'=>'123', 'sex'=>1, 'age'=>1],
        ['name'=>'test1', 'pwd'=>'123', 'sex'=>1, 'age'=>1],
        ['name'=>'test1', 'pwd'=>'123', 'sex'=>1, 'age'=>1],
        ['name'=>'test1', 'pwd'=>'123', 'sex'=>1, 'age'=>1]
    ]);

      注意:使用DB操作时,需要先引入 —— use DB;

    5. save 更新单条数据

    public function update(Request $request)
    {
        $data = $request->validate([
            'id' => 'required'
        ]);
    
        // 更新数据前需要先获取当前数据
        $user = User::find($data['id']);
    
        // 获取和设置要进行更新的数据
        $map = $request->except('id');
    
        if (empty($map)) {
            return '没有更新任何数据';
        }
    
        foreach ($map as $k => $v) {
            $user->$k = $v;
        }
    
        // 返回更新后的用户信息集合
        $result = $user->save();
    }

    6. update 更新指定ID条件的单条数据

    public function update()
    {
        User::where('id', 1)->update(['name' => 'update_name']);
    }

    7. update 限定where约束条件批量更新数据

    public function updateWhere()
    {
        User::where('sex', 2)->where('age','>',30)->update([
            'name' => 'update_name'
        ]);
    }

    8. 删除数据

    public function delete(Request $request)
    {
        // 删除指定id的数据
        $id = $request->input('id');
        $user = User::find($id);
        $user->delete(); 
    
        // destroy删除指定的单个或多个id的数据
        User::destroy(1);            //删除主键为1的记录
        User::destroy([1, 2, 3]);    //删除主键为1,2,3的记录
    
        // 根据条件批量删除数据
        $deletedRows = User::where('age', 445)->delete();
    }

    9. 查询所有数据

    public function all()
    {
        return User::all();
    }

    10.  查询指定ID的数据

    public function find($id)
    {
        // 普通查询
        return User::find($id);
    
        // 使用下面的查询方法未查到数据,则会抛出404错误
        return User::findOrFail($id);
    }

    11. 指定条件查询数据

    public function findwhere() 
    {
        // 指定条件查询第一条数据,返回一维数组对象
        return User::where(['sex'=>1, 'age'=>'21'])->first();
    
        //根据where查询符合条件第一条记录,没有则抛出404
        return User::where('age', '>', 21)->firstOrFail();
    
        // 指定条件查询全部数据,返回二维数组对象
        return User::where(['sex'=>1, 'age'=>'21'])->get();
    }

     11. 按照指定排序方式查询数据

    public function findOrderBy() 
    {
        // 按照创建时间排序,返回第一条用户数据
        return User::orderBy('created_at', 'desc')->first();
    }

    12. 组合查询(获取前几条数据)

    public function findWhere()
    {
         return User::where('age','>',10)    // 年龄大于10
                    ->where(['sex'=>1])      // 性别为男
                    ->orderBy('age', 'desc') // 按照年龄大小逆向排序
                    ->take(5)                // 获取前面5条数据
                    ->get();
    }

     13. 统计查询

    public function count()
    {
        // 根据条件统计数量
        return User::where('sex', 1)->count();
    
        // 获取满足条件的最大年龄
        return User::where('sex', 1)->max('age');
    }

    14. 分页查询 

    /*
     *    获取数据分页
     *
     *    参数:
     *        1. $num :每页显示数量;
     *        2. $colum :查询指定字段;
     *        3. $pageName :分页名称,即上下页链接分页参数名称;
     *        4. $p :指定获取的页数   
     */
    public function paginate($num = 10, $colum = [*], $pageName = 'page', $p = 1)
    {
        return User::where('sex', 1)->orderBy('created_at', 'desc')->paginate($num, $colum, $pageName, $p);
    }
    
    
    // 返回数据样式
    {
       "total": 50,                                    // 数据总数量
       "per_page": 15,                                 // 每页显示数量
       "current_page": 1,                              // 当前页码
       "last_page": 4,                                 // 上一页码
       "first_page_url": "http://laravel.app?page=1",  // 首页链接
       "last_page_url": "http://laravel.app?page=4",   // 最后页链接
       "next_page_url": "http://laravel.app?page=2",   // 下一页链接
       "prev_page_url": null,                          // 上一页链接
       "path": "http://laravel.app",                   // 根地址
       "from": 1,                                      // 当前页数据来源页
       "to": 10,                                       // 当前页数据量
       "data":[                                        // 当前页数据数组
            {
                // Result Object
            },
            {
                // Result Object
            }
       ]
    }

     15. 分块查询

    问题背景:一个完整的项目经常会隔一段时间收集、处理大批量的数据,常常是对一整张表的数据处理,而我们直接的思路往往是直接获取所有数据,然后遍历每一条数据进行操作。如果数据量很小,这样处理没问题,但如果数据量很大(一般超过5K就算大批量数据了),每一次遍历进行的数据更新操作又多,那很有可能会遇到代码执行超时的问题,并且循环几万、几十万的数据操作时,很有可能会把服务器运行内存消耗完,那就直接down机了,更恐怖。

     解决思路:每次获取一段数据块再进行遍历操作,当前数据块儿处理完成,再获取第二部分数据块儿。这样每次循环都是一小块儿数据,一个块儿数据遍历结束后再重新获取数据进行遍历,就解决了上面的问题。

    (1)普通数据遍历和块查询遍历处理的区别代码演示 

    // 普通代码演示
    $users = User::all();
    foreach ($users as $user) {
      $user->update(['sex' => 1]);
    }
    
    // 按每次处理100条数据块的方式优化代码演示
    User::chunk(100, function ($users) {
      foreach ($users as $user) {
        $user->update(['sex' => 1]);
      }
    });

    (2)带条件的块查询遍历处理

    User::where('age', '>', '20')->chunk(100, function ($users) {
      foreach ($users as $user) {
        $user->update(['sex' => 1]);
      }
    });

     注意:如果是 “自更新” 的块查询处理,则会漏掉一半的数据,如下演示:

    User::where('sex', 0)->chunk(100, function ($users) {
      foreach ($users as $user) {
        $user->update(['sex' => 1]);
      }
    });

    说明

    运行上面的代码,不会报错,执行的逻辑是找出性别未知(sex=0)的用户,一次操作100位未知性别用户,修改性别字段sex=1。

    逻辑很简单,但在这个过程中,当第一个数据库的数据被修改后,下一个数据块的数据将是在被修改后的数据中选出来的,这个时候数据变了,而page也加了1,所以执行结束后,只对数据中一半的数据进行了更新操作。

    如果没有明白的话,来看一下chunk的底层实现。

    还以上面的代码为例,假如一共有400条数据,数据被按照100条进行分块处理。

    page = 1:最开始的时候page为1,选取1-100条数据进行处理;

    page = 2:这时候前一百数据的 sex值全部为1,那么再次筛选的时候数据将从第101条开始(此时sex=0筛选出来的是除改修改后的剩下300条),如果此时page仍然等于1,则可以按照我们正常需求执行,但这个时候的page=2,那么处理的数据将是第200-300之间的数据。

    chunk函数如下:

    public function chunk($count, callable $callback)
    {
        $results = $this->forPage($page = 1, $count)->get();
    
        while (count($results) > 0) {
            // On each chunk result set, we will pass them to the callback and then let the
            // developer take care of everything within the callback, which allows us to
            // keep the memory low for spinning through large result sets for working.
            if (call_user_func($callback, $results) === false) {
                return false;
            }
    
            $page++;
    
            $results = $this->forPage($page, $count)->get();
        }
    
        return true;
    }

    参考:https://www.jianshu.com/p/5dafd0d6e69ahttps://laraveldaily.com/process-big-db-table-with-chunk-method/

    16. 软删除

    软删除并不是物理删除,只是在对应表中添加字段 "delete_at",在使用模型查找数据时,自动判断delete_at是否为空,如果不为空则判断为已被软删除,反之则说明未被删除。先执行以下配置:

     (1) 要使用软删除的模型能力,需要先在模型文件中引入软删除引擎,此处配置User模型作为参考:

    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Database\Eloquent\SoftDeletes;    // 引入软删除引擎
    
    class User extends Model
    {
        use SoftDeletes;                             // 调用软删除类
    
        protected $dates = ['deleted_at'];
    
        protected $fillable = [
            'name', 'email', 'password', 'image'
        ];
    }

    (2)使用迁移增加delete_at字段

    php artisan make:migration alter_users_table --table=users

    (3)填充迁移文件

    Schema::table('flights', function ($table) {
        $table->softDeletes();
    });

    (4)执行迁移文件

    php artisan migrate

     配置以上,则可以进行软删除相关操作,具体如下:

    (1)判断某条数据是否已被软删除

    $user = User::find(1);
    
    if ($user->trashed()) {    // 判断是否被软删除
          
    }

    (2)强制查询所有数据(包括被软删除的数据)

    User::withTrashed()->where('sex', 1)->get();

    (3)只查询被软删除的数据

    User::onlyTrashed()->where('sex', 1)->get();

    (4)恢复被软删除的数据

    $user = User::find(1);
    $user->restore();

     (5)批量恢复多个被软删除的数据

    User::withTrashed()->where('sex', 1)->restore();

    (6)强制删除指定数据

    $user = User::find(1);
    
    // 强制删除单个模型实例...
    $user->forceDelete();
    
    // 强制删除所有相关模型...
    $user->history()->forceDelete();
    展开全文
  • Laravel 查询&数据库&模型 1.with()与load区别: 都称为延迟预加载,不同点在于load()是在已经查询出来的模型上调用,而with()则是在 ORM 查询构造器上调用。 Order::query()->with(['...
  • Laravel连接数据库 修改主目录下的.env 和 config/database.php 配置文件 //.env DB_CONNECTION=mysql //数据库类型 DB_HOST=127.0.0.1 //ip , localhost DB_PORT=3306 //端口 DB_DATABASE=laravel //数据库名 ...
  • 1.创建模型UserModel 例:app\models\UserModel.php <?php namespace app\models; use Illuminate\Database\Eloquent\Model; class UserModel extends Model{ //数据库表名 protected $table = 'user'; //主键...
  • 二是模型操作数据库 1. 数据表的创建与配置 一、建立数据库的方式: 1.sql语句 2.图形界面 phpAdmin Navicat 创建好数据表即可 二、数据库laravel框架中的配置 在.env文件中 也可以在config目录下面的database....
  • laravel分为三大数据库操作(DB facade[原始查找],查询构造器[Query Builder],Eloquent ORM): use Illuminate\Support\Facades\DB; 1.DB facade[原始查找] $results = DB::select('select * from ...
  • Laravel使用多数据库

    2020-12-21 11:27:42
    Laravel使用多数据库一 设置数据库信息二 使用1 Eloquent 方式2 DB的使用 一 设置数据库信息 //第一个数据库的相关信息 ‘mysql’ => [ ‘driver’ => ‘mysql’, ‘url’ => env(‘DATABASE_URL’), ...
  • Laravel模型操作

    2020-04-21 17:32:56
    模型定义位置:项目路径/app/下,建议分目录管理 一:模型 语法:php artisan make:model 模型名 ...2 定义$timestamps属性,值是false,如果不设置为false则会默认操作数据库中created at和upda...
  • 一、使用DB门面操作 需要引入 DB类 Illuminate\Support\Facades\DB 查询数据库记录 DB::select(SQL语句); DB::select('select * from `stu` from ') //以数组形式返回结果 增加数据库记录 DB::insert(SQL语句); DB:...
  • 查询操作: DB::select("select * from test"); //返回所有的二位数组 新增操作 : $bool=DB::insert("insert into test(id,name) values(?,?)",[1,'lf']); 更新操作 : $bool=DB::update('...
  • Laravel操作数据库

    2019-07-25 10:09:39
    最近学laravel框架,频繁用到数据库操作,特此总结! 原文传送门:https://blog.csdn.net/zls986992484/article/details/52824962 Laravel提供了3种操作数据库方式:DB facade(原始方式)、查询构造器和...
  • laravel 模型操作

    2020-07-22 23:52:08
    1.2、创建模型 php artisan make:model[目录名/]模型文件名 # 分目录的 php artisan make:model Models/Member # 创建模板并生成迁移文件 实际工作中,就是创建模型同时就创建好了迁移文件 ...
  • <p>I have table partitioned into say P14, P17, p16 etc. and I am using eloquent model I want to select the data from this partition. <p>For this use case I am not getting I should I use ...
  • <p>I am using an existing project of Laravel and this existing project already has models, here is an example of one: <pre><code><?php /** * Created by Reliese Model. * Date: Fri, 20 Apr 2018 ...
  • 连接数据库 配置 app 同级目录下的 .env 文件, 根据自己项目的实际情况配置即可 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=study_laravel DB_USERNAME=root DB_PASSWORD=123 运行原生SQL...
  • 在使用 Laravel Eloquent 模型时,我们可能要判断取出的结果集是否为空,但我们发现直接使用 is_null 或 empty 是无法判段它结果集是否为空的。 var_dump 之后我们很容易发现,即使取到的空结果集, Eloquent 仍然会...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,026
精华内容 2,410
关键字:

laravel模型操作数据库