我有3张桌子
user: id, username
subreddits: id, name, created_at
posts: id, title, link, user_id, subreddit_id
问题是,我需要手动获取subreddit / category的id,而我需要动态获取它。我怎样才能做到这一点?
这是SubredditController.php中的show()
方法
public function show(Subreddit $subreddit)
{
$posts = Subreddit::findOrFail(3)->posts()->get();
return view('subreddit/show')->with('subreddit', $subreddit)
->with('posts', $posts);
}
这是Subreddit Model
class Subreddit extends Model
{
protected $fillable = [
'name',
'description'
];
public function user() {
return $this->belongsTo('App\User');
}
public function posts() {
return $this->hasMany('App\Post');
}
}
routes.php文件
Route::resource('subreddit', 'SubredditController');
Route::resource('posts', 'PostsController');
RouteServiceProvider.php
$router->model('articles', 'App\Article');
$router->model('subreddit', 'App\Subreddit');
$router->model('posts', 'App\Post');
答案 0 :(得分:1)
当您使用Route Model Binding时,Laravel将自动检索URI中提供的$ id的对象,然后可以使用依赖注入将其作为参数注入到您的方法中。
public function show(Subreddit $subreddit){ ... }
您可以像访问任何对象一样访问数据。例如。要访问记录的ID,您可以使用$subreddit->id
。
public function show(Subreddit $subreddit)
{
$posts = Subreddit::findOrFail($subreddit->id)->posts()->get();
return view('subreddit/show')->with('subreddit', $subreddit)
->with('posts', $posts);
}
答案 1 :(得分:0)
为什么要在函数的参数中键入模型?
show(Subreddit $subreddit)
我在某个地方看到了它,但我不记得是否需要使用它。
你在数据库中使用id
列自动增量吗?如果没有,你必须在模型中指定它添加属性递增并将其设置为false
public $incrementing = false;
并指定实际的主键
protected $primaryKey = 'code';
使用您发布的配置,此代码适用于我:
<强> routes.php文件强>
Route::resource('subreddit', 'SubredditController');
<强> SubredditController.php 强>
public function show($id)
{
$subreddit = Subreddit::findOrFail($id);
$subreddit->load('posts');
return view("subreddit/show")->with("subreddit", $subreddit);
}
<强>网址
http://localhost:8888/test/public/subreddit/1
我在同一个对象中加载关系,因此只向视图发送一个参数
答案 2 :(得分:0)