从零开始laravel

通过composer创建项目

composer create-project --prefer-dist laravel/laravel blog "6.*"

 部分

# 创建数据表迁移
#php artisan make:migration create_blog_posts_table --create=blog_posts

# 运行迁移
#php artisan migrate

# 回滚变更
#php artisan migrate:rollback

# 创建自定义sql
#...

# 生成模型
php artisan make:model ModelsBlogBlogPosts

# 测试数据填充
php artisan make:factory BlogPostsFactory --model=Models/Blog/BlogPosts
# 填充类
php artisan make:seeder BlogPostsTableSeeder
# 允许填充命令
php artisan db:seed

# 控制器
php artisan make:controller BlogBlogController


###

##
# laravel 6.^ 中文提示包
    composer require "overtrue/laravel-lang:~3.0"
    完成上面的操作后,将项目文件 config/app.php 中的下一行
    IlluminateTranslationTranslationServiceProvider::class,
    替换为:
    OvertrueLaravelLangTranslationServiceProvider::class,
    # 将语言包发布到项目中
    php artisan lang:publish zh-CN
    composer remove "overtrue/laravel-lang"
# 另一种方式[成功]
composer require caouecs/laravel-lang:~3.0
根据需要复制语言包到 resources/lang 目录中。
->lang->zh-CN.json
->lang->zh-CN文件夹

# 认证系统
composer require laravel/ui:^1.0 --dev
php artisan ui bootstrap --auth
# php artisan ui vue --auth
# php artisan ui react --auth

 自定义认证,在注册的时候会默认检测users表,发现users不存在的情况需要修改AuthRegisterController中的

laravel中模型关联的总结

// 多个情况下返回模型集合 IlluminateDatabaseEloquentCollection
                // dd($model->orderGoods);
                // 单个情况下返回具体模型
                // dd($orderGoods->goods);
                // 返回关联 IlluminateDatabaseEloquentRelationsHasMany
                // dd($model->orderGoods());
                // 返回关联 IlluminateDatabaseEloquentRelationsBelongsTo
                // dd($model->goods());
                // 关联还可以作为查询语句构造器使用
                // AppPost::find(1)->comments()->where('title', 'foo')->first();
                // 模型对应数据库的一条数据

监听SQL

php artisan make:listener QueryListener --event=IlluminateDatabaseEventsQueryExecuted

生成./app/Listeners/QueryListener.php

<?php

namespace AppListeners;

use IlluminateContractsQueueShouldQueue;
use IlluminateDatabaseEventsQueryExecuted;
use IlluminateQueueInteractsWithQueue;
use IlluminateSupportFacadesLog;

class QueryListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  QueryExecuted  $event
     * @return void
     */
    public function handle(QueryExecuted $event)
    {
        if (env('APP_ENV', 'production') == 'local') {
            $sql = str_replace("?", "'%s'", $event->sql);
            $log = vsprintf($sql, $event->bindings);
            Log::info($log);
        }
    }
}

./app/Providers/EventServiceProvider.php:19

 生成日志文件

 

laravel自动注入练习

public function index(Content $content)
    {
        app(OptionService::class, ['id'=>1, 'a'=>2])->update();

        return $content
            ->title($this->title())
            ->description('网站全局内容基本选项设置')
            ->body(new OptionForm());
    }

其中 app(OptionService::class, ['id'=>1, 'a'=>2])->update(); 代码表示调用OptionService这个类实例的update方法

其中OptionService有一个需要注入的参数,放到最前面,后面是一个id和a参数需要以关联数组的方式传入

namespace AppServicesCms;

use AppModelsCmsOption;

class OptionService
{
    protected $option;
    public function __construct(Option $option, $id, $a)
    {
        dd($option, $id, $a);
        $this->option = $option;
    }


}

laravel,多对多的测试

原文地址:https://www.cnblogs.com/jiangxiaobo/p/13596112.html