如果在Laravel Eloquent声明

时间:2017-03-02 08:29:50

标签: php mysql laravel eloquent

我有两个模型,它们通过三个id连接到一个1 id。模型AdviceProtocol定义了三个ID:threshold_category1_idthreshold_category2_idthreshold_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。 我试着查看其他人如何解决这个问题,但我找不到准确的在线信息。

2 个答案:

答案 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'))