从零开始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 Models\Blog\BlogPosts

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

# 控制器
php artisan make:controller Blog\BlogController


###

##
# laravel 6.^ 中文提示包
    composer require "overtrue/laravel-lang:~3.0"
    完成上面的操作后,将项目文件 config/app.php 中的下一行
    Illuminate\Translation\TranslationServiceProvider::class,
    替换为:
    Overtrue\LaravelLang\TranslationServiceProvider::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不存在的情况需要修改Auth\RegisterController中的

 

 

laravel中模型关联的总结

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

 

 

 

监听SQL

php artisan make:listener QueryListener --event=Illuminate\Database\Events\QueryExecuted

生成./app/Listeners/QueryListener.php

<?php

namespace App\Listeners;

use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Database\Events\QueryExecuted;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Log;

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 App\Services\Cms;

use App\Models\Cms\Option;

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


}

 

laravel,多对多的测试

 

posted @ 2020-09-01 14:43  jiangxiaobo  阅读(195)  评论(0编辑  收藏  举报