laravel笔记

一 , migrations操作数据表
先在数据库中生成一个记录表:php artisan migrate:install
1.1.创建表
laravel笔记_第1张图片
1.2.内容
laravel笔记_第2张图片
1.3.执行迁移

php artisan migrate

2.1修改表

php artisan make:migration alter_posts_table

2.2.内容

public function up()
    {
        //增加字段
        Schema::table('posts',function (Blueprint $table){
           $table->tinyInteger('status')->default(0)->comment('文章的状态,0未知,1通过,-1删除');
        });
    }
   		 //修改字段,如果报一个关于doctrine/dbal的错,就执行下`composer require doctrine/dbal`
        $table->string('status')->default('1')-> change();
        
        public function down()
    {
        Schema::table('posts',function (Blueprint $table){
            $table->dropColumn('status');
        });
    }
    }

错误解决:
1.
laravel笔记_第3张图片
laravel笔记_第4张图片
二 , 路由关联模型,直接可以得到对应表的数据

  1. 模板里 : {{$post->title}}
    2.路由里:Route::get('/posts/{post}','\App\Http\Controllers\PostController@show'); //文章详情页,{post}需与模型名称对应,然后通过第1步的id查找对应的那条数据
    3.控制器里
    //详情页
    public function show(Post $post){
    return view(‘post/show’,compact(‘post’));
    }
    4.模型里

    //对应posts表
    class Post extends Model
    {
    }
    5.最后模板渲染

    {{$post->title}}

三 , 截取文本
1.laravel : {{str_limit($post->content,25,'...')}} //保留25字符 , 多余的用…表示
2.thinkphp : {:mb_substr(strip_tags($comment.content),0,20)}{if mb_substr($select_boder,0,4) == 'cpxl'} select-boder {/if} //strip_tags()把HTML标签过滤掉

四 , 请求对象
1.
控制器
use Illuminate\Http\Request;

//保存文章
    public function store(Request $request){
        dd($request->except(['_token']));  
        dd(request()); //获取全部请求数据
        dd(request()->all()); //获取表单全部提交数据
        $post = request(['title','content']);  //获取指定表单数据
        dd(request()->except(['_token'])); //获取表单全部提交数据 , 排除掉某些不需要数据

		Post::create($post);
    }

模型create()不填以下会报错不能插入字段

//对应posts表
class Post extends Model
{
//    protected $guarded;//不可注入字段
    protected $fillable=['title','content'];//可注入字段
}

5.Auth用法(第(1)步必须先执行 )

使用前默认配置(默认看这步):
laravel笔记_第5张图片
laravel笔记_第6张图片
laravel笔记_第7张图片
使用前自定义配置(自定义看这步):
在这里插入图片描述
laravel笔记_第8张图片
laravel笔记_第9张图片
(1)登陆
模型下:

use Illuminate\Foundation\Auth\User as AuthUser;

class User extends AuthUser
{
    protected $fillable=[
      'name','email','password'
    ];
}

控制器下:

public function login(){
        $this->validate(request(),[
            'email'=>'required|email',
            'password'=>'required'
        ]);
        $user=request(['email','password']);
        $is_remember=request('is_remember');
        if(\Auth::attempt($user,$is_remember)){
            return redirect('/posts');
        }
        return \Redirect::back()->withErrors('邮箱密码不匹配');
    }

这里如果要获取用户id , 就用\Auth::id();
其他要获取属性就 \Auth::user()->name \Auth::user()->+属性名
(2)登出

public function logout(){
        \Auth::logout();
        return redirect('/login');
    }

如果遇到remember_token报错 , 就在对应的user控制器上加上

protected $rememberTokenName = '';

(3)模板

{{\Auth::user()->name}}

这样可以获取登陆后user表的name , idAuth已自动获取
(4)模型关联
//对应posts表 , 同级目录下不需要use App\BaseModel

class Post extends BaseModel
{
    public function User(){
    	关联了User模型
        return $this->belongsTo('App\User');
    }
}

{{$post->user->name}} 这样就可以获取Post模型关联的User模型的name熟悉 , id $post里面会自动获取
6.policy权限
(1)php artisan make:policy PostPolicy
(2)把用户模型User和文章模型Post关联laravel笔记_第10张图片
(3)这里的前提是路由参数使用了模型传参laravel笔记_第11张图片
(4)进一步加强权限 , 判断是否显示laravel笔记_第12张图片
7.ORM关联(模型):
一对多:

一个User有多条评论commentslaravel笔记_第13张图片
一条评论Comment属于一个用户userlaravel笔记_第14张图片
laravel笔记_第15张图片
定义完之后 ,上面的$post->comments也是一对多 , 就可以{{$comment->user->name}}取得某条评论的评论者 第二参数user对应Comment模型的user(),第三个参数name是user表的name

推荐:
PostController下:

//详情页
    public function show(Post $post){
        //预加载post模型关联的评论 , 这样渲染模板里的关联{{$post->comments}}就不用再操作模型了
        $post->load('comments');
        return view('post/show',compact('post'));
    }

一对多的计数

      Post 一                                          comments多
$posts=Post::orderBy('created_at', 'desc')->withCount('comments')->paginate(5);

{{$post->comments_count}}

8.资源路由
laravel笔记_第16张图片

你可能感兴趣的:(laravel)