我们说我有以下内容。 4个表和3个模型(角色,帖子,用户)。
可以为User
分配多个Roles
,Roles
可以分配给多个Users
。
Posts
可以在数据库中为每个条目创建一个Role
。
我需要帮助
我希望能够从相关角色中获取用户所有帖子的列表。因此,通过调用auth()->user()->getPosts()
,我应该从Posts
获取附加到Roles
的所有User
。我以为我可以使用hasManyThrough
,但我不知道它可以帮到我的案例:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'roles.user_id' in 'field list' (SQL: select
发布.*,
个角色.
user_id from
帖子inner join
角色on
角色.
ID为=
的帖子.
ROLE_ID where
角色.
的user_id = 1)
到目前为止,这是我的模型:
user.php的
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function posts()
{
return $this->hasManyThrough(Posts::class, Role::class);
}
}
Role.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public function users()
{
return $this->belongsToMany(User::class);
}
}
Posts.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Posts extends Model
{
public function roles()
{
return $this->hasMany(Role::class);
}
}
答案 0 :(得分:1)
忘掉hasManyThrough
,我错了。
在这里你可以这样做:
$user = User::with('roles')->first();
$userPosts = Posts::whereIn('role_id', $user->roles->pluck('id')->toArray())->get();
return $userPosts;
如果您想通过致电auth()->user()->getPosts()
来获取帖子,请将以下方法添加到您的用户模型中:
public function getPosts()
{
return Posts::whereIn('role_id', $this->roles->pluck('id')->toArray())->get();
}