为了账号安全,请及时绑定邮箱和手机立即绑定

laravel控制器中使用eloquent的问题

laravel控制器中使用eloquent的问题

PHP
小怪兽爱吃肉 2019-03-06 11:46:11
User.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $table = 'user'; protected $primaryKey = 'id'; public $timestamps = false; public function comments(){ return $this->hasOne('App\Models\Comment', 'uid', 'uid'); } } Comment.php <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Comment extends Model { protected $table = 'comment'; protected $primaryKey = 'id'; public $timestamps = false; public function comments(){ return $this->hasMany('App\Models\User', 'uid', 'uid'); } } 我想在Test控制器中使用User模型中comments方法的数据 应该怎么使用呢? use App\Models\User; class TestController extends Controller{ public function test(){ } }
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

这是典型的一对多模型关联: Eloquent 关联:一对多

从你的源码来看,你的映射关系是错的,一个用户肯定会发表多个评论,所以在 User model 中应该是用 hasMany,

class User extends Model
{
     public function comments(){ 
         return $this->hasMany('App\Models\Comment', 'uid', 'uid');
     }
}

而对于 Comment 模型,每个评论只属于一个用户

class Comment extends Model
{
     public function user(){ 
         return $this->belongsTo('App\Models\User', 'uid', 'uid');
     }
}

拿到用户的所有评论写法如下:

class TestController extends Controller{
     public function test(){
       $user= User::find($id);
       $comments= $user->comments; //拿到该用户的所有评论
  }
}

如果你拿到了一条评论数据,要获取到该评论的用户模型,应该是

class TestController extends Controller{
     public function test(){
       $comment= Comment::find($id);
       $user= $comment->user; //拿到该评论的所属用户
  }
}

其实在官方文档中已经说的比较清楚了,请认真仔细阅读文档。

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 419 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信