如何在 Laravel 中实现 BelongsToThrough 关系?
我有表:
**projects_table**
id
**categories_table**
id
project_id
**properties_table**
id
category_id
Run Code Online (Sandbox Code Playgroud)
类别属于项目
public function project(){
return $this->belongsTo('App\Project');
}
Run Code Online (Sandbox Code Playgroud)
属性属于类别
public function category(){
return $this->belongsTo('App\Category');
}
Run Code Online (Sandbox Code Playgroud)
我们怎样才能建立关系?
物业按类别属于项目
public function project(){
return $this->belongsToThrough('App\Project', 'App\Category');
}
Run Code Online (Sandbox Code Playgroud)
编辑问题。
因为我想在我的应用程序上进行多租户,而租户是 PORJECT。我想按项目分离类别和属性。
类别是属于项目财产是属于类别
所以我想通过类别在属性和项目之间建立关系。现在,我需要project_id
在类别和属性表上添加:,我认为这不是正确的方法。
我有一条如下所示的路线。
Route::get('/articles/{articleSlug}' ,
[App\Http\Controllers\ArticleController::class, 'single']);
Run Code Online (Sandbox Code Playgroud)
single()
at类的方法ArticleController
如下:
public function single($slug)
{
$article = Article::where('slug',$slug)->first();
$article->increment('viewCount');
return view('home.article',compact('article'));
}
Run Code Online (Sandbox Code Playgroud)
现在我希望使用路由模型绑定根据articles
列从表中查找此数据slug
。但据我所知,路由模型绑定是根据id查找数据的。那么如何将路由模型绑定查找数据从仅更改id
为slug
仅用于ArticleController.php
(意味着其他控制器类可以使用 id 作为路由模型绑定)?
我正在尝试为两个模型创建路由模型绑定:“用户”和“文章”
Route::get('/{user}', 'UsersController@show');
Route::get('/{article}', 'ArticlesController@show');
问题是,其中一个总是优先于另一个,这取决于它们的声明顺序。
如果用户和文章恰好具有相同的路由,我希望用户路由优先于文章路由,但问题是 laravel 在与用户不匹配时返回 404 页面,即使路由应该匹配文章。
我知道您可以为此使用带有正则表达式的 where() 函数,但是这两个模型对路由键名称使用相同的结构(它们都是字符串)。我可以让正则表达式搜索数据库列或其他东西吗?