猿问

laravel控制器中使用eloquent的问题

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(){
       
  }
}
小怪兽爱吃肉
浏览 420回答 2
2回答

牛魔王的故事

这是典型的一对多模型关联: 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; //拿到该评论的所属用户 } } 其实在官方文档中已经说的比较清楚了,请认真仔细阅读文档。
随时随地看视频慕课网APP
我要回答