laravel 关联模型

官方文档5.5:https://laravelacademy.org/post/8203.html

一对一   hasone  (用户-手机号)

一对多   hasmany(文章-评论)

一对多反向 belongsto (评论-文章)

多对多  belongstomany (用户-角色)

远层一对多  hasmanythrough  (国家-作者-文章)

多态关联  morphmany  (文章、视频-评论)

多态多对对  morphtomany  (文章、视频-标签)

//post模型  文章表的模型层
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $guarded = [];

    //关联user(用户)模型
    public function user()
    {
        return $this->belongsTo('App\User');//如果按照laravel中规定的定义的,后面两个参数可以忽略,
     //return $this->belongsTo('App\User','user_id','id');//user_id为外键
} //在文章的模型层中写的,用户和文章是一对多,所以文章和用户是一对多反向,使用   belongsto }


//关联comment模型
    public function comments()
    {
        return $this->hasmany('App\comment')->orderBy('created_at','desc');
    }
//controller
//添加评论
public function comment(Post $post)
    {
        $this->validate(request(),[
            'content'=>'required|min:3'
        ]);
        $comment = new Comment();
        $comment->user_id = Auth::id();
        $comment->content = request('content');
        $comment->post_id = $post->id;
        $post->comments()->save($comment);//也可以使用以前的添加
        return back();//返回上一个页面
    }
//评论的模型层需要关联user
public function user()
{
     return $this->belongsTo('App\User');
}
//可以在controller中进行预加载 $post->load('comments');  其余不变,知识view不用进行加载了
//view
<ul class="list-group">                     
    @foreach($post->comments as $comment)   
    <li class="list-group-item">            
        <h5>{{$comment->created_at}} by {{$comment->user->name//注意user不能加()
        <div>                               
            {{$comment->content}}           
        </div>                              
    </li>                                   
    @endforeach                             
</ul>                                       

 

posted @ 2019-05-22 16:33  小呆1107  阅读(1377)  评论(0编辑  收藏  举报