Laravel笔记

本文环境 PHP7.3,Laravel6.0不懂的可以评论或?

?系我邮箱:owen@owenzhang.com, 系我邮箱:owen@owenzhang.com

著作权归OwenZhang所有。商业转载请联系OwenZhang获得授权,非商业转载请注明出处。

修改https

域名https 修改.env的APP_URL 修改config/admin.php的’https’ => env(‘ADMIN_HTTPS’, true)

dcat-admin

表单提交后pid为null,改为0存数据库

protected function form()
    {
                .....
                if (request()->parent_id == null) {
                $form->parent_id = 0;
            }
        }

Dcat Admin 关闭代码生成器

laravel5\config\admin.php ‘helpers’ => [ ‘enable’ => true,// 改成false即可 ]

表单 子表新增

//Controller类
protected function form()
    {
                .....
                $form->hasMany('basedataBanks', '银行管理', function (Form\NestedForm $form){
            $form->select('company', '公司名称')->options(['1' => '公司1', '2' => '公司2']);
            $form->text('bank', '开户银行');
            $form->text('account', '账号');
        });
        }
        //Model类
        public function basedataBanks()
    {
        return $this->hasMany(BasedataBank::class, 'basedata_supplier_id', 'id');
    }

企业微信截图_17096894757057

微信截图_20240308094118

表单,select多级联动

//1,表单代码
$form->select('name', '存管方')->options(
            (new BasedataSupplier())->getDataByType(BasedataSupplier::TYPE_DEPOSITOR)
                ->pluck('name', 'id')
        )->required()
            ->loads(['platform', 'contract_number'], ['/api/basedata-depositor/platformList', '/api/basedata-depositor/contractNumberList']);

        $form->select('platform', '存管地点')->disable();
        $form->select('contract_number', '存管合同号')->disable();

//2,路由          
                Route::get('basedata-depositor/platformList', 'ProjectController@platformList');
    Route::get('basedata-depositor/contractNumberList', 'ProjectController@contractNumberList');

//3,存管地点的select数据
                public function platformList(Request $request)
    {
        $id  = $request->get('q');
        $add = BasedataSupplier::query()->where('id', $id)->value('addr');
        return [0 => $add];
    }

    public function contractNumberList(Request $request)
    {
        $id  = $request->get('q');
        $add = BasedataSupplier::query()->where('id', $id)->value('contract_number');
        return [0 => $add];
    }

        //4,vendor/encore/laravel-admin/src/Form/Field/Select.php
        //找到public function load 和public function loads ;两个地方下面添加
        $(document).off('change', "{$this->getElementClassSelector()}");

微信截图_20240401153245 2

项目备注

前端网站

前端网站文件,dist文件夹内复制到项目public下覆盖替换,另外将dist文件夹内index.html代码复制替换resources/views/welcome.blade.php

判断请求是get还是post

request()->isMethod(‘post’) request()->isMethod(‘get’) //获取get或者post都参数id值 $request = request()->all(); $request[‘id’];

Redis

1.切换数据库

1.1 config/database.php

'redis' => [
'douying' => [
            'url' => env('REDIS_URL'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => '10',
        ],
],

hset

1.2 调用

$redis = Redis::connection('douying');
$redis->hset('report:www', $oaid, $adDataJson);

数据库

字段自增+1

//更新浏览量+1
        Article::query()->where('id', '=', $id)->update(
            [
                'pageview' => \DB::raw('pageview + 1'),
            ]
        );

获取某字段ID数组

/**
     * @notes : 获取某字段ID数组
     * @param $where
     * @param $value
     * //                $where     = [];
     * //                $where[]             = [
     * //                    'channel_key',
     * //                    '=',
     * //                    $channelKey,
     * //                ];
     * //                $where[]             = [
     * //                    'created_at',
     * //                    '>=',
     * //                    date('Y-m-d')
     * //                ];
     * @return mixed
     * @author: OwenZhang
     * @time  : 2023/5/9 16:39
     */
    public static function getPluckIdArr($where, $value)
    {
        return self::where($where)->pluck($value)->toArray();
    }

单个值

/**
     * 有条件的获取值
     *
     * @param array  $where
     * @param string $value
     */
    public function getValue(array $where, string $value)
    {
        return self::where($where)->value($value);
    }

有条件的获取一条记录

/**
     * 有条件的获取一条记录
     *
     * @param $where
     *
     * @return array
     */
    public function getOne($where): array
    {
        $res = self::where($where)->first();
        return $res ? $res->toArray() : [];
    }

有条件的获取总数

/**
     * 有条件的获取总数
     *
     * @param array  $where
     * @param string $value
     */
    public function getSum(array $where, string $value)
    {
        return self::where($where)->sum($value);
    }

获取列表

 /**
     * @notes : 获取列表
     * @param array $select
     * @param array  $where
     * @param int    $page
     * @param int    $limit
     * @param string $order
     * @param string $orderSort
     * @return array
     * @author: OwenZhang
     * @time  : 2023/4/17 13:42
     */
    public function getList(array $select, array $where, int $page, int $limit, string $order = 'id', string $orderSort = 'desc'): array
    {
        $res = $this->select($select)
            ->where($where)
            ->orderBy($order, $orderSort)
            ->offset(($page - 1) * $limit)
            ->limit($limit)
            ->get();

        return $res ? $res->toArray() : [];
    }

连表查询

$list = DB::table('recharge_orders')->select('recharge_orders.user_id', 'devices.id', 'devices.device_info')
            ->leftJoin('devices', 'devices.uid', '=', 'recharge_orders.user_id')
            ->where('recharge_orders.status', '=', 3)
            ->where('recharge_orders.created_at', '>=', '2023-04-24 00:00:00')
            ->where('devices.device_info', '<>', '')
            ->groupBy('recharge_orders.user_id')
            ->offset($page)
            ->limit($limit)
            ->get()
            ->toArray();

事务

        //事务
        //修改用户水晶和鲸钻变更数据
        try {
            DB::beginTransaction();

            //修改用户水晶和鲸钻变更数据
            $beans = $money * 100 / $exchangeMoney;
            DB::table('users')
                ->where('id', $userId)
                ->update([
                    'beans'      => $userBeans - $beans,
                    'updated_at' => date('Y-m-d H:i:s'),
                ]);

            //写入提现表
            //手续费
            $commission = $money * $serviceCharge / 100;
            $id         = DB::table('order_transfer')
                ->insertGetId([
                    'user_id'       => $userId,
                    'order_no'      => createOrderNo('T'),
                    'money'         => $money,
                    'commission'    => $commission,
                    'reality_money' => $money - $commission,
                    'type'          => $type,
                    'status'        => OrderTransfer::STATUS_PENDING,//待处理
                    'source'        => $source,
                    'source_number' => $beans,
                    'os'            => $os,
                    'created_at'    => date('Y-m-d H:i:s'),
                ]);

            //支出水晶
            DB::table('user_coins_change_log')
                ->insert([
                    'user_id'      => $userId,
                    'type'         => 2,//类型(1.收入 2.支出)
                    'coin_type'    => 3,//币种(1.鲸钻 2.金币 3.水晶)
                    'before_coins' => $userBeans,//变动前值
                    'coins'        => $beans,//变动值,
                    'after_coins'  => $userBeans - $beans,//变动后值,
                    'table_type'   => 'order_transfer',//相关表
                    'relation_id'  => $id,//相关记录id
                    'remark'       => '水晶提现' . $money . '元',//备注
                    'created_at'   => date('Y-m-d H:i:s'),
                ]);

            DB::commit();
            return ['code' => 200, 'msg' => '申请提交成功,预计7个工作日到账!', 'data' => ['money' => $beansToMoney - $money, 'money_text' => $beansToMoney - $money . '元']];
        } catch (\Exception $e) {
            DB::rollback();
            return ['code' => 415, 'msg' => '数据更新失败' . $e->getMessage()];
        }

whereor orwhere orwhereraw

if ($titlecontent = $this->request->get('titlecontent')){
if (!$this->request->get('title')){
$msg = $msg->where('title', 'like', '%' . $titlecontent . '%');
}
$msg = $msg->orWhereRaw('(content like ? and status = ?)', ["%{$titlecontent}%", 1]);
}

根据id获取列表

//根据id获取列表
public function getListByIdArr($idArr)
{
if (!$idArr) {
return [];
}
$idArr = [1];

$list = self::select('id', 'name')
->whereIn('id', $idArr)
->get();
$data = [];

if ($list) {
$list = $list->toArray();
foreach ($list as $value) {
$data[$value['id']] = $value;
}
}

return $data;
}

服务器配置Nginx

location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

执行定时任务

php artisan toufang_bubao_kszf 一直执行 php /www/wwwroot/owenweb/artisan schedule:work

定时任务的问题

定时任务调取不到//bootstrap/function.php 全局函数 很坑 Symfony\Component\Debug\Exception\FatalThrowableError : Call to undefined function App\Lib\Utils\arrayToObject()

Laravel笔记插图4

打印mysql语句

DB::connection()->enableQueryLog();
var_dump(DB::getQueryLog());

模板引擎渲染

return Admin::content(function (Content $content) use ($lists) {

$content->description('文本管理');

$content->breadcrumb(
['text' => '文本管理', 'left-menu-active' => '文本管理']
);

$content->body(view('shuabao-backend::text.index', compact('lists')));
});

<small>{{ $description }}</small>

!()[https://oscimg.oschina.net/oscnet/up-1a9fdb067b6ec3086f5446bd4c0f272b263.png]

数据迁移

迁移就像是数据库的版本控制, 允许团队简单轻松的编辑并共享应用的数据库表结构,迁移通常和 Laravel 的 数据库结构生成器配合使用,让你轻松地构建数据库结构。如果你曾经试过让同事手动在数据库结构中添加字段,那么数据库迁移可以让你不再需要做这样的事情。

创建表和插入多条记录

public function up()
    {
        \DB::statement("
CREATE TABLE `classifys` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) NULL DEFAULT '0' COMMENT '父ID',
  `title` varchar(191) NOT NULL DEFAULT '' COMMENT '名称',
  `type` tinyint(2) NOT NULL DEFAULT '1' COMMENT '类型:1=产品',
  `status` tinyint(2) NOT NULL DEFAULT '1' COMMENT '状态:1=显示 2=隐藏',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分类表';
");
        \DB::statement("
INSERT INTO `classifys` (`title`,`created_at`) VALUES ('产品分类1','2024-02-22 15:22:41');
");

        \DB::statement("
INSERT INTO `classifys` (`title`,`created_at`) VALUES ('产品分类2','2024-02-22 15:22:41');
");
    }

生成迁移

php artisan make:migration create_users_table

新的迁移位于database/migrations目录下。每个迁移文件名都包含时间戳,以便让 Laravel 确认迁移的顺序。

--table--create选项可用来指定数据表的名称,或是该迁移被执行时是否将创建的新数据表。这些选项需在预生成迁移文件时填入指定的数据表:

php artisan make:migration create_users_tablecreate=users

php artisan make:migration add_votes_to_users_tabletable=users

运行迁移

php artisan migrate

在生产环境强制执行迁移

一些迁移操作是具有破坏性的, 这意味着可能会导致数据丢失。 为了防止有人在生产环境中运行这些命令, 系统会在这些命令被运行之前与你进行确认。如果要强制忽略系统的提示运行命令, 则可以使用--force标记:

php artisan migrateforce

回滚迁移

若要回滚最后一次迁移, 可以使用rollback命令。 此命令将回滚最后一次“迁移”的操作,其中可能包含多个迁移文件:

php artisan migrate:rollback

你可以在rollback命令后面加上step参数,来限制回滚迁移的个数。 例如,以下命令将回滚最近五次迁移:

php artisan migrate:rollbackstep=5

migrate:reset命令可以回滚应用程序中的所有迁移:

php artisan migrate:reset

使用单个命令来执行回滚或迁移

migrate:refresh命令不仅会回滚数据库的所有迁移还会接着运行migrate命令。 这个命令可以高效地重建整个数据库:

php artisan migrate:refresh

// Refresh the database and run all database seeds…

php artisan migrate:refreshseed

使用refresh命令并提供step参数来回滚并再执行最后指定的迁移数。例如, 以下命令将回滚并重新执行最后五次迁移:

php artisan migrate:refreshstep=5

删除所有表 & 迁移

php artisan migrate:fresh

php artisan migrate:freshseed

调整到另外一个路由

return route('FilePull', $arr);

Route::get('file', \[ 'as' =\> 'FilePull', 'alias' =\> '获取文件', 'uses' =\> 'FileController@getFile' \]);

删除和软删除

_Cases::find($id)->delete();_ Cases::destroy($id); _//__软删除恢复

//        Cases::find($id)->restore();_

永久删除模型

// 强制删除单个模型实例...

$flight->forceDelete();

// 强制删除所有关联模型...

$flight->history()->forceDelete();

给参数默认值

$request->input('company_name',’sdfsaf’);

模型关联(morphTo,morphMany)

在网站开发的过程中,经常会遇到 评论商品,评论文章, 评论店铺 等等,在处理这样的需求的时候, 经常会新建一张 评论表, 然后通过 一个 type字段来区分 评论的对象

比如某T记录表内有存其他表的记录

  table_type varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '相关表',
  relation_id int(11) NOT NULL DEFAULT '0' COMMENT '相关记录id',

然后要查各个字表记录 就可以用到morphTo其实和with一样

使用方法

```
public function getApiList($search, $select = 'user_coins_change_log.*', $page = 1, $limit = 15)
{
    return $this->filterSearch($search)->selectRaw($select)
        ->with('coinChangeTable')
        ->orderBy('id', 'desc')->offset(($page - 1) * $limit)->limit($limit)
        ->get()
        ->toArray();
}

    //table_type 和 relation_id是表字段名
    public function coinChangeTable()
{
    return $this->morphTo('coinChangeTable', 'table_type', 'relation_id');
}
```

配置

\app\Providers\AppServiceProvider.php ,需要在这个文件增加映射

play_game_record goods_order user_currency_exchange_log order_transfer 这4个相当于是T记录表的table_type的值 有新的值就得 在这个文件添加一个

/**
     * 自定义多态关联的类型字段
     */
    private function bootEloquentMorphs()
    {
        Relation::morphMap([
            'play_game_record' => 'App\Models\PlayGameRecord',
            'goods_order' => 'App\Models\GoodsOrder',
            'user_currency_exchange_log' => 'App\Models\UserCurrencyExchangeLog',
            'order_transfer' => 'App\Models\Order\OrderTransfer'
        ]);
    }

The bootstrap/cache directory must be present and writable错误

解决方式

php artisan cache:clear

Buy me a cup of coffee 🙂

觉得对你有帮助,就给我打赏吧,谢谢!

微信赞赏码链接,点击跳转:

Laravel笔记插图5

Previous Article
Next Article