【问题标题】:Laravel: using "morphMany" and joining another table?Laravel:使用“morphMany”并加入另一个表?
【发布时间】:2022-03-31 20:39:49
【问题描述】:

我也是 laravel 的新手。我有一个关于 Eloquent 的问题:

表结构:

User: id, username

Posts: id, user_id, content

Likes: id, likeable_type, likeable_id, user_id

(因为我想让 'Likes' 表也可以为 cmets 扩展。)

Models\Likes.php

class Likes extends Model

public function likeable()
{
    return $this->morphTo();
}

模型\Post.php

class Posts extends Model

public function likes()
{
    return $this->morphMany("\App\Models\Likes","likeable");
}

当我打电话时

$post = Posts::find($id)->likes()->get();

在我的控制器中,它会像这样返回:

"likes": [
{
  "id": 1,
  "likeable_type": "App\\Models\\Posts",
  "likeable_id": 1,
  "user_id": 1,
},
{
  "id": 2,
  "likeable_type": "App\\Models\\Posts",
  "likeable_id": 1,
  "user_id": 1,
}]

但是我怎样才能得到这样的结果:

"likes": [
{
  "id": 1,
  "likeable_type": "App\\Models\\Posts",
  "likeable_id": 1,
  "user_id": 1,
  "username":"chenhui",//join user on user.id = likes.user_id
}...

非常感谢和抱歉我的英语不好!

【问题讨论】:

  • 你的 Likes 模型是否有指向用户的关系?

标签: laravel


【解决方案1】:

我相信你需要的 Likes 模型

class Likes extends Model

public function user()
{
   return $this->belongsTo('App\Models\User');
}

然后应该是:

$post = Posts::find($id)->likes()->with('user')->get();

【讨论】:

  • 谢谢!它返回一个错误:'Method with does not exist.',但你启发我将protected $with = 'user'; 添加到 Likes 模型中,它解决了我的问题!!!
  • 很高兴听到我能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 2018-03-29
  • 2020-08-25
相关资源
最近更新 更多