我在mysql数据库中有3个表(项目, category_questions_mapping 和 category_questions ),其中有以下几列:
项目表具有以下列:
item_id, uuid, radius, category_id
category_questions_mapping包含以下列:
category_id, category_question_id
category_questions包含以下列:
category_question_id, data
我为 items 表创建了模型,该表是 Items.php ,在其中创建了以下方法:
public function category_questions() {
return $this->hasOne('App\CategoryQuestionsMapping','category_id','category_id');
}
上述方法基本上是项目表的 category_id 与category_question_mappings表的 category_id之间的关系
问题陈述:
我想知道应该对上述方法进行哪些更改,以便能够从 category_questions表中提取数据列值。我们可以通过上述方法建立关系,以便它可以拉出数据列吗?
以上方法将在显示控制器中使用。
答案 0 :(得分:1)
要访问category_question表列,您还必须在category_question_mapping模型上定义关系,例如:
public function category_questions() {
return $this->hasOne('App\CategoryQuestions','category_question_id','category_question_id');
}
然后访问您想要的字段,例如$items->category_questions_mapping->category_questions->data
。
顺便说一句,我建议将您显示的第一个关系命名为category_questions_mapping(),因为它与category_questions_mapping表链接。
答案 1 :(得分:0)
您不能仅更改category_questions
方法来解决此问题。但是您可以在2个模型中建立2个关系,并通过2个关系查询data
。
// App\Item
public function category_questions_mapping() {
return $this->hasOne(CategoryQuestionsMapping::class, 'category_id', 'category_id');
}
// App\CategoryQuestionsMapping
public function category_question() {
return $this->hasOne(CategoryQuestion::class, 'category_question_id', 'category_question_id');
}
// Somewhere else
// Get data:
$data = $item->category_questions_mapping->category_question->data;
// Find by data:
$items = \App\Item
::whereHas('category_questions_mapping.category_question', function ($query) {
$query->where('data', 'foo');
})
->get();
答案 2 :(得分:0)
您的关系使用方式如下:
public function category_questions() {
return $this->belongsToMany('App\CategoryQuestions','category_questions_mapping','category_id', 'category_question_id);
}