一 , migrations操作数据表
先在数据库中生成一个记录表:php artisan migrate:install
1.1.创建表
1.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.
二 , 路由关联模型,直接可以得到对应表的数据
模板里 : {{$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.最后模板渲染
三 , 截取文本
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)步必须先执行 )
使用前默认配置(默认看这步):
使用前自定义配置(自定义看这步):
(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关联
(3)这里的前提是路由参数使用了模型传参
(4)进一步加强权限 , 判断是否显示
7.ORM关联(模型):
一对多:
一个User有多条评论comments
一条评论Comment属于一个用户user
定义完之后 ,上面的$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}}