精华内容
下载资源
问答
  • laravel支持常用的数据库产品, 我们以MySQL为例。首先在配置文件内,配置参数对数据库连接。 在配置文件 config/database.php 内,默认的配置如下: 包括数据库连接名,数据库地址,端口,用户名和密码,数据库名...

    引言

    没有模型的框架是没有灵活的!每个框架都会针对数据库进行深度设计,
    以便快捷地进行SQL的增删改查,把重复的劳动抽象出来,提高应用开发效率。

    图片

    本期就来讲讲laravel的模型初阶用法。

    代码时间

    模型是在代码中抽象一层,把数据库操作提取出来。laravel支持常用的数据库产品,
    我们以MySQL为例。首先在配置文件内,配置参数对数据库连接。

    在配置文件 config/database.php 内,默认的配置如下:

    pic

    包括数据库连接名,数据库地址,端口,用户名和密码,数据库名等等信息,就完成了初始化配置。
    一般,如果不手动指定,laravel模型内的 $connection 就是取的配置文件内的这一行:

    'default' => env('DB_CONNECTION', 'mysql'),
    

    也即是mysql数据库。接着我们通过迁移功能,创建一个迁移文件。这样无需我们手动创建数据库表。
    在命令行运行以下指令:

    php artisan make:model Event --migration
    

    命令行输出如下:

    Model created successfully.
    Created Migration: 2020_09_27_202416_create_events_table
    

    可以看到系统创建了一个模型文件在 app/Event.php。其中内容视不同的laravel版本而有所不同,但是基础内容未变:

    pic

    有了模型对应数据库表,现在我们还缺一个数据库表,在迁移文件内进行配置。
    由于我们在上述命令行脚手架中使用了 –migration 选项,系统就创建了迁移文件,
    编辑 2020_09_27_202416_create_events_table.php 内容。自带的内容如下:

    pic

    其中 up 方法 Schema 用于创建数据库字段,索引等等,其中 down 方法,用于回滚迁移。
    在生命中,默认给了两个字段:

    • 自增的id字段
    • timestamps() 方法会创建 created_atupdated_at 两个 datetime 字段

    我们为数据库表再增加一些字段:

    pic

    其中 string 方法创建的是 VARCHAR 类型的字段,text 方法创建 TEXT 类型的字段。
    nullable 方法表名该字段默认允许为 NULL

    完成表单的字段设计后,我们将设计的表应用到数据库。在命令行执行以下指令:

    php artisan migrate
    

    命令行输出大致如下:

    Migration table created successfully.
    Migrating: 2014_10_12_000000_create_users_table
    Migrated: 2014_10_12_000000_create_users_table
    Migrating: 2014_10_12_100000_create_password_resets_table
    Migrated: 2014_10_12_100000_create_password_resets_table
    Migrating: 2020_09_27_202416_create_events_table
    Migrated: 2020_09_27_202416_create_events_table
    

    其中 users 表,password_resets 表,是系统自带的权限系统使用的。

    为了验证是否迁移成功,我们在命令行使用mysql客户端连接目标数据库。
    首先展示所有的表名:

    pic

    重点看一下我们设计的 events 表的结构,是否如 Schema 的期望:

    pic

    如果我们需要重新设计表结构,对上面的迁移进行回滚也很简单,执行以下命令:

    php artisan migrate:rollback
    

    输出内容如下:

    Rolling back: 2020_09_27_202416_create_events_table
    Rolled back: 2020_09_27_202416_create_events_table
    Rolling back: 2014_10_12_100000_create_password_resets_table
    Rolled back: 2014_10_12_100000_create_password_resets_table
    Rolling back: 2014_10_12_000000_create_users_table
    Rolled back: 2014_10_12_000000_create_users_table
    

    这可不妙,我们只想回滚 events 表,不想回滚 user password_resets 表。
    那么我们需要手动指定,回滚的时候,仅回滚最新一批次的迁移。执行以下代码:

    php artisan migrate:rollback --step=1
    

    输出如下:

    Rolling back: 2020_09_27_202416_create_events_table
    Rolled back: 2020_09_27_202416_create_events_table
    

    注意是按照批次回滚的,如果回滚到第二批次,第三批次,只用指定 –step=N 即可。

    写在最后

    本文讲解了laravel在连接数据库,创建数据库表迁移文件的内容。对于强大的Eloquent ORM 这只是一个开始。

    Happy coding 😃

    我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者

    展开全文
  • 我们需要专门的文本搜索引擎,并且连接laravel应用程序内,这就是本文所要说的Scout。 代码时间 laravel scout 是一个独立的包和类库,可以很方便地通过composer接入系统, 且与Eloquent Model模型关联使用。 官方...

    引言

    对于数据库查询,主键和索引往往是加速搜索的利器。而对于文本搜索,
    模糊搜索,全文检索,MySQL的MyISAM引擎虽然支持,但是性能往往不能达到生产的需求,
    或者说服务带载能力太弱。

    在这里插入图片描述

    我们需要专门的文本搜索引擎,并且连接到laravel应用程序内,这就是本文所要说的Scout。

    代码时间

    laravel scout 是一个独立的包和类库,可以很方便地通过composer接入系统,
    且与Eloquent Model模型关联使用。

    官方scout内置了 AlgoliaElasticsearch 驱动,但是社区也提供了其他可选项。
    如果默认的话,优先选用的肯定是 Algolia

    laravel 5.3及以上版本为系统引入scout库:

    composer require laravel/scout
    

    然后在 config/app.php 文件内的 providers 服务提供者内加入如下内容:

    'providers' => [
        Laravel\Scout\ScoutServiceProvider::class,
    ]
    

    如果想要使用配置文件设置scout,那么就把配置文件发布出来:

    php artisan vendor:publish
    

    这会生成 config/scout.php 文件。我们再引入 algolia 的sdk库文件,以便在程序内使用:

    composer require algolia/algoliasearch-client-php
    

    想要在模型内引入搜索服务,只需在模型文件内引入

    use Laravel\Scout\Searchable;
    

    在模型内手动实现,那些属性和字段可以被搜索,只需实现 toSearchableArray() 方法。
    然后实现 searchableAs(),返回一个字符串,用于指定索引的模型名。

    scout默认订阅了模型的 create/delete/update 时间,这些写操作的数据会触发更新索引,
    删除索引,创建索引。方式可以是同步,也可以放到队列内异步处理。

    通过索引进行搜索,scout在查询方式上几乎与eloquent model的方式别无二致。比如:

    Review::search('Lious')->get();
    

    或者链式调用分页:

    Review::search('Lious')->paginate(20);
    

    由于 search 方法返回的是Query Builder对象,可以链式调用查询条件,和集合的方法。
    比如对查询结果集进行过滤:

    Review::search('Lious')->where('account_id', 2)->get();
    

    你在模型内使用的方法,这里都适用。

    对于某些数据有可能并不想建立索引,放入搜索引擎,那么只需在模型内显式声明如下:

    Review::withoutSyncingToSearch(function () {
        factory(Review::class, 10)->create();
    });
    

    批量创建10条数据,且不建立索引。

    手动控制某些输入放入搜索引擎,建立索引数据,则可以链式调用 searchable() 方法:

    Review::all()->searchable();
    

    或者通过关联关系,将关联模型的数据写入搜索引擎:

    $user->reviews()->searchable();
    

    某些搜索数据不进行索引:

    Review::where('actived', false)->unsearchable();
    

    无效的条目不加入索引,节省空间。

    假如你的数据库已经生产了大量的数据,或者在测试阶段,想要手动把所有的定义数据
    导入到搜索引擎,可以在命令行如此操作:

    php artisan scout:import App\\Review
    

    写在最后

    本文通过介绍laravel scout索引类的方法,向大家展示了如何引入搜索引擎,
    以及在程序内精细化控制索引数据的方法。全文检索在现代的web应用中应对高并发的
    场景很有一套,值得大家深入研究学习。

    Happy coding 😃

    我是@程序员小助手,持续分享编程知识,欢迎关注。

    展开全文
  • 多个应用中数据库连接错乱1,情景描述 公司服务器现在十几二十几个项目,我们经常会发现,在多个... 2.1第一个猜想的是不是在B应用连接数据库时,直接使用的是A应用中连接数据库的资源,但是这种情况应该不会出现。

    多个应用中数据库连接错乱

    1,情景描述

    公司服务器现在十几二十几个项目,我们经常会发现,在多个基于laravel的web应用中,当应用A进行一个长时间操作时(PHP会运行超过30s+),在这期间,在应用B中进行数据库操作时,B应用会连接到A应用中的数据库,而非B的数据库

    2,分析过程

    2.1第一个猜想的是不是在B应用连接数据库时,直接使用的是A应用中连接数据库的资源,但是这种情况应该不会出现。

    2.2laravel使用了vlucas/phpdotenv这个包来加载.env文件中的配置信息,具体的过程如下:

    2.2.1,从.env文件中读取配置信息;
    2.2.2,调用putenv()方法将配置信息设置到php环境中;
    2.2.3,调用laravel封装的env()方法来读取配置信息(env()中其实调用了getenv()方法来配置信息读取);

    .env文件主要功能是为了在不同的部署环境实现不同配置,这样不同的环境可以共用同一套代码;
    putenv()和getenv()是php4,php5,php7支持的用来设置和获取环境变量(environment variable)的方法。

    问题就出现在这里。
    getenv()和putenv()不是一个线程安全的函数,意味着如果两个线程同时调用这个函数,就会出现问题。
    而且服务器的环境正好是:
    Apache + worker 模式,这种模式下,php运行环境是以线程模式运行的,所以才出现了上述的问题。

    3.解决办法

    3.1启用php进程运行模式(参照articles/dev/server/run_environments_for_php.md);
    3.2将配置单独放在php配置文件中,这个可能造成硬编码,不过不推荐
    3.3等待laravel修复这个问题。

    4,参考资料:https://laravel-china.org/topics/2791/have-you-encountered-multiple-applications-in-the-database-connection-problem

    5,或者大家有没有遇到过这个问题,交流一下解决办法~。

    展开全文
  • 拱 Arch是使用laravel-admin构建的管理仪表板,laravel-admin是laravel的...首先,安装laravel 5.5,并确保数据库连接设置正确。 composer require encore/laravel-admin 然后运行以下命令来发布资产并进行配置: ...
  • Laravel中小企业办公室员工时间管理系统 最初在 UI上开发PHP后端是@gurayyarar使用Bootstrap 3和jQuery开发的AdminBSB-Sensitive。 移植到Laravel 8并作为Laravel快速刷新的一部分构建Docker映像。 使用Laravel身份...
  • 【背景】:因为小编公司要求,需要php去连接操作SQL server数据库;这个问题困扰了小编一周的时间老烦人了,未来自己也为了帮助跟小编有同样困惑的猿友们,所以想抽个时间好好记录一下该问题,以防以后要遗忘;本次...

    【背景】:因为小编公司要求,需要php去连接操作SQL server数据库;这个问题困扰了小编一周的时间老烦人了,为了小编自己也为了帮助跟小编有同样困惑的猿友们,所以决定抽个时间好好记录一下该问题,以防以后遗忘;本次方法,小编亲测可用,希望能帮助到大家。

    一、运行环境

    操作系统 = Linux Centos7.4

    服务器软件 = Nginx1.18

    脚本语言:PHP7.4

    数据库:SQL server2012

    框架:Laravel5.2

    特殊要求:gcc4.8版本以上(版本太低的话,无法编译pdo_sqlsrv
    二、php连接 SQL server 需要安装php的2个扩展(pdo_sqlsrv 和 sqlser)
    1.先下载pdo_sqlsrv源码包(所有Linux操作最好都使用root用户权限)

    pecl install pdo_sqlsrv
    
    pecl install sqlser

    三、配置laravel

    1.在laravel目录中找到.env文件;这是个隐藏文件,我们可以用ll -a去找到它,并找到APP_URL=http://localhost,在其下面加上以下字段。

    DB_CONNECTION=sqlsrv
    DB_HOST=连接IP
    DB_DATABASE=master(初始数据库)
    DB_USERNAME=连接数据库用户名
    DB_PASSWORD=连接密码

    2.找到laravel目录下的laravel\config\database.php,并打开在其'connections' => []中加入以下信息:

    'sqlsrv'=> [
                'driver'=>'sqlsrv',
                'host'=> env('DB_HOST','连接IP'),
                'database'=> env('DB_DATABASE','master'),
                'username'=> env('DB_USERNAME','连接数据库用户名'),
                'password'=> env('DB_PASSWORD','连接密码'),
                'charset'=>'utf8',
                'prefix'=>'',
            ],

    3.在laravel\app\Http\routes.php配置测试路由

    Route::get('test', 'IndexController@server_test');

    4.在laravel\app\Http\Controllers\IndexController.php新建server_test函数

        //SQLserver连接测试
        public function server_test(){
            //php用pdo_sqlsrv驱动源码连接
           /* $conn = sqlsrv_connect('连接IP',array('Database'=>'master','UID'=>'用户名','PWD'=>'密码'));
            if($conn == false){
              var_dump(sqlsrv_errors());exit;
            }
            $sql = "SELECT TOP 1000 * FROM [dbo].[spt_monitor]";
            $result = @sqlsrv_query($conn, $sql);
            while ( $re = @sqlsrv_fetch_array($result)) {
                dump($re);
            }*/
    
            //laravel内置DB类连接
            $res = DB::table('dbo.spt_monitor')->get();
            dd($res);
        }

    四、这个时候进行测试话,应该会报一个,缺少SQL server连接驱动的错误,我们跟着要求在Linux服务器上安装即可:

    curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
    
    yum remove unixODBC-utf16 unixODBC-utf16-devel
    
    ACCEPT_EULA=Y yum install msodbcsql17
    
    sudo ACCEPT_EULA=Y yum install mssql-tools
    
    echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
    
    echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
    
    source ~/.bashrc
    
    yum install unixODBC-devel
    

    五、测试连接

    展开全文
  • Laravel队列处理

    千次阅读 2017-07-15 10:43:56
    laravel 的队列服务对各种不同的后台队列服务提供了统一的 API。队列允许你延迟执行消耗时间的任务,比如发送一封邮件。这样可以有效的降低请求响应的时间。队列的配置文件被存储在 config/queue.php 中。在这个文件...
  • Fitness Tracker将Nuxt(Vue)用于React性前端,该前端连接到单独的Laravel后端API。 我使用JSON Web令牌(JWT)来确保前端和后端之间数据交换的安全性。 特征 实时搜索USDA 8000种食物的食物数据库 通过节省食物来...
  • laravel项目的某一次发布后,项目中连接数据库突然报错,而用同样的数据库账号密码在机器上连接是可以的。 临时解决方案 经过短暂时间的排查,没找到原因,原数据库密码DB_PASSWORD=abcde#142!*,修改数据库密码为DB_...
  • laravel框架使用总结(一)

    千次阅读 2017-11-02 17:57:57
    1.数据库连接配置中设置[超时]等配置: [参考链接:http://fideloper.com/laravel-pdo-connection-options] 因为有需求是需要从不同的host中通过sql请求来获取数据,所以需要设置超时时间。 首先找到连接配置文件:...
  • 前言: 最近在学习 laravel 框架,学习的版本是 7.15.0 ,记录一下学习过程中遇到的问题和难点以及一些总结。...要使用 redis 队列驱动,需要在配置文件 config/database.php 中配置 Redis 数据库连接。 阻塞
  • 这需要时间,具体取决于PC的性能 由于库提供程序的更改,日志中可能会出现警告或错误,但是如果make init本身成功,则不会有问题。 在浏览器中显示启动的laravel应用 在浏览器中查看启动的phpMyAdmin 如何启动容器 ...
  • 代码时间 在开始介绍之前,我们先看一下MVC设计模式的一个概要图: Model就是模型,是数据库交互部分;View就是视图,是渲染数据的页面。我们本期介绍的就是中间的连接部分—— controller 控制器。 首先使用命令行...
  • 要使用此项目,您将需要一个sql db连接。 当前的联网数据库是宅基地。 用户名是宅基,密码是secert 这是SQL哑巴的转储 -phpMyAdmin SQL Dump-版本4.9.0.1- //www.phpmyadmin.net/ -主机:localhost:3306-生成时间...
  • 编辑.env并设置数据库连接详细信息 编辑.env并设置您的推送器连接密钥https://dashboard.pusher.com/apps/yourId/keys ) (通过git clone安装或下载并制作.env时,运行php artisan key:generate ...
  • 在我们连接数据库,并且使用迁移功能创建了数据库表结构, 使用Seeder为数据库初步填充了一些伪数据。有了这些准备工作,我们可以考虑做一个资源接口功能, 对外提供数据支持了。 代码时间 有没有感觉自己设计的...
  • laravel运行速度在某次升级之后,变得...打开php-fpm的慢日志,发现问题定位到 db:connect 上,是数据库连接占用了过多的时间。于是, 在 config/database.php 写了以下 PDO (options=>…)的参数: ...
  • 使用Laravel和Tp5.1的朋友应该都有接触数据库迁移的功能,这个功能很方便做数据库版本管理,可以不用远程连接直接管理数据库结构,项目上线时也比较方面,直接执行迁移就自动生成了对应的数据表。我一直都喜欢用迁移...
  • 多个数据库连接。 语法与Laravel的查询生成器非常相似。 例子 // Make sure you have Composer's autoload file included require 'vendor/autoload.php' ; // Create a connection, once only. $ config = [ '...
  • 关于 PDO 和 PDOStatement 的区别

    千次阅读 2018-03-03 16:42:44
    经常使用现成的框架,比如thinkphp ,laravel等,来连接数据库。只需要看着框架的手册,用分装好的方法,就可以生成不同的SQL ,开发很简单,速度也快。不禁让我生出了,现在的phper,特别是做web开发的phper,还是否...
  • 时间表 BearSchedule是一个PHP / Laravel项目,可轻松用于显示和共享项目进度表。... 全部添加将所有数据库连接数据添加到环境中。 也可以添加Microsoft Graph API密钥。 这样您就可以使用Mircosoft登录
  • laravel 应用中显得尤为不足,而且这段时间需要学习laracms 其本身要求的数据库就需要达到5.7没办法只能升级。看了网上很多的教程和方法,前期总是很好的,但是每次重启的时候都会报无法连接本地的错误。Can't ...
  • kevin_payment-源码

    2021-04-11 00:02:59
    该项目基于reactJS到前端(由于时间原因我无法完成)和Laravel到后端。 我正在使用docker和docker-compose运行。 入门 首先,您需要运行以下docker命令来设置Web和api项目: docker-compose up -d 打开在浏览器中...
  • 其次就是到 config/database.php 文件中,配置正确的数据库连接信息 这是鄙人的默认数据,后期可自行修改优化. > 注意前面的 运行 composer 命令; 强烈建议学习新版本的框架,要学会使用composer哦 无聊的话...
  • 在用过laravel框架,发现它的路由和数据库ORM确实非常好用,但是整体确实有点慢,执行到控制器大约需要耗时30ms左右。于是打算做一个拥有非常好用的路由和orm又非常简单的框架。所以你会发现one框的路由和ORM有...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

laravel连接数据库时间