【发布时间】:2016-01-02 17:20:36
【问题描述】:
我正在尝试将用户指定为论坛类别的版主。目前,我只是尝试显示用户可以添加版主subreddit/{id}/moderators 的路线并显示 subreddit 名称。
为此,我收到了No query results for model [App\Subreddit]
我一定是在某个地方弄乱了表之间的关系。
我的桌子
#users: id, name, email...
#subreddits: id, name, user_id...
#moderators: id, user_id, subreddit_id
Routes.php
Route::get('subreddit/{id}/moderators', [
'as' => 'moderators',
'uses' => 'ModeratorsController@create'
]);
Moderator.php模特
class Moderator extends Model
{
protected $table = 'moderators';
protected $fillable = ['user_id', 'subreddit_id'];
public function subreddit() {
return $this->belongsToMany('App\Subreddit');
}
public function user() {
return $this->belongsTo('App\User');
}
}
在User 模型中,我有一个hasManyThrough
public function moderators() {
return $this->hasManyThrough('App\Moderator', 'App\Subreddit');
}
在Subreddit 模型中
public function moderators() {
return $this->hasMany('App\Moderator');
}
然后在ModeratorsController我有以下create()方法
public function create(Moderator $moderator, Subreddit $subreddit, User $user)
{
$subreddit = Subreddit::with('user')->findOrFail($subreddit->id);
return view('user/moderators')->with('subreddit', $subreddit)->with('user', $user)->with('moderator', $moderator);
}
如果我将 findOrFail 更改为 firstOrFail,它将获得数据库中的第一个 subreddit,但我不想要第一个,我想要我试图添加版主的那个。
【问题讨论】:
-
请张贴您的表格。您在模型上所做的肯定是错误的,因为如果主持人属于用户,则用户模型中的 hasManyThrough 关系是错误的。
-
首先,我认为您的表中有冗余。这是一种不好的做法。为什么您将 user_id 保留在主持人表中,而您可以通过 subreddit 访问它?或者我可能误解了你要做什么。无论如何请解释一下:)
-
subreddits表仅包含类别user_id的创建者,而moderators表允许将多个用户添加为版主。我正在尝试在这里创建一个视图,以允许 subreddit 的所有者添加版主。 -
版主表格是一种枢轴吗?我的意思是它是否描述了用户和 subreddit 之间的多对多关系?
-
@Mithredate 是的,它是用户和 subreddits 的数据透视表。
标签: php mysql laravel laravel-5 eloquent