Laravel 5.4中表之间的多重关系

时间:2018-08-30 03:04:51

标签: php mysql laravel laravel-5.4

我在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表中提取数据列值。我们可以通过上述方法建立关系,以便它可以拉出数据列吗?

以上方法将在显示控制器中使用。

3 个答案:

答案 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);
}