我有两个模型,它们通过三个id连接到一个1 id。模型AdviceProtocol
定义了三个ID:threshold_category1_id
,threshold_category2_id
和threshold_category3_id
。这三个都与模型id
中的Categories
相关联。 threshold_cateogry_id可以是与categories.id
相关联的数字,也可以为null。
在我的查询中,我需要浏览threshold_catogory_ids
中的三个,如果它们是NOT NULL
,则检索categories.name
。我现在的查询:
$advicePreparationsQuery = AdviceProtocol::select(['advice_protocols.name', 'advice_protocols.category', 'questions.name AS question_name', 'categories.name as Category_Name','categories.name as Category_Name2'])
->join('questions', 'advice_protocols.user_goal_id', '=', 'questions.id')
->join('categories', function ($join)
{
$join->on('advice_protocols.threshold_category1_id', '=', 'categories.id')->orOn('advice_protocols.threshold_category2_id', '=', 'categories.id')->orOn('advice_protocols.threshold_category3_id', '=', 'categories.id');
})
此查询现在返回两次相同的category.name
。
我试着查看其他人如何解决这个问题,但我找不到准确的在线信息。
答案 0 :(得分:1)
我尝试使用三个不同的别名进行三次连接,然后获取每个不同别名的每个类别名称的名称:
$advicePreparationsQuery = AdviceProtocol::select(['advice_protocols.name', 'advice_protocols.category', 'questions.name AS question_name', 'categories1.name as Category_Name','categories2.name as Category_Name2','categories3.name as Category_Name2'])
->join('questions', 'advice_protocols.user_goal_id', '=', 'questions.id')
->join('categories as categories1', 'advice_protocols.threshold_category1_id', '=', 'categories1.id')
->join('categories as categories2', 'advice_protocols.threshold_category2_id', '=', 'categories2.id')
->join('categories as categories3', 'advice_protocols.threshold_category3_id', '=', 'categories3.id');
答案 1 :(得分:0)
在查询中按名称使用分组,即->groupBy('category.name')
$advicePreparationsQuery = AdviceProtocol::select(['advice_protocols.name', 'advice_protocols.category', 'questions.name AS question_name', 'categories.name as Category_Name','categories.name as Category_Name2'])
->join('questions', 'advice_protocols.user_goal_id', '=', 'questions.id')
->join('categories', function ($join)
{
$join->on('advice_protocols.threshold_category1_id', '=', 'categories.id')->orOn('advice_protocols.threshold_category2_id', '=', 'categories.id')->orOn('advice_protocols.threshold_category3_id', '=', 'categories.id');
}
->groupBy('category.name'))