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; //拿到该评论的所属用户
}
}
其实在官方文档中已经说的比较清楚了,请认真仔细阅读文档。
- 2 回答
- 0 关注
- 419 浏览
添加回答
举报
0/150
提交
取消