【发布时间】:2021-06-09 08:44:23
【问题描述】:
数据库有三个表:
- “文章”->“id(int),title(varchar)”,
- “类别”->“id (int), title(varchar)”和
- "categoryables" -> "category_id (int), categoryable_id (int), categoryable_type(varchar)"。
我还有两个模型用于处理这些“文章”和“类别”表,但我没有“可分类”模型
我使用“文章”模型中的多对多多态关系获取与特定文章相关的所有类别:
public function categories(){
return $this->morphToMany(Category::class, 'categoryable');
}
由此我得出结论,Laravel 本身创建了一个“可分类”模型和一个称为“可分类”的关系。
此外,我可以使用“类别”模型中的关系“articles()”获取属于特定类别的所有文章:
public function articles(){
return $this->morphedByMany(Article::class, 'categoryable');
}
但我也有不属于任何类别的文章。
如何获取不属于任何类别的文章?
【问题讨论】:
-
看来您必须直接从“文章”表中获取它们,因为没有类别意味着它们不会出现在数据透视表中。获取所有文章是否对您有用,然后创建一个新数组并映射 getArticles 查询的结果,该查询返回所有文章,以及 catagory=null (或空或其他)将其设置为“未分类”的任何地方' 在新数组中?然后你可以返回那个新数组,因为所有文章现在都有某种形式的分类,即使它只是“未分类”。
-
@user6854465 为所有文章创建数据透视表条目是个好主意,即使是那些没有类别的文章。请告诉我如何实现这一点,如果我想在“category_id”字段中添加一个 NULL 值,如果需要在“categoryables”表中,在从文章模型中创建、更新和删除记录时?
标签: database laravel model left-join relationship