Laravel 5.4中表之间的多重关系

问题描述 投票:2回答:3

我在mysql数据库中有3个表(items,category_questions_mapping和category_questions),其中我有以下列:

items表包含以下列:

item_id, uuid, radius, category_id

category_questions_mapping包含以下列:

category_id, category_question_id

category_questions包含以下列:

category_question_id, data

我已经为itemss.php创建了items表的模型,我在其中创建了以下方法:

public function category_questions() {
            return $this->hasOne('App\CategoryQuestionsMapping','category_id','category_id');
        }

上述方法基本上是items表的category_id与category_question_mappings表的category_id之间的关系

问题陈述:

我想知道我应该在上面的方法中做出哪些更改,以便我能够从category_questions表中提取数据列值。有没有我们可以在上面的方法中建立关系,以便它可以拉数据列?

上述方法将用于控制器中进行显示。

php mysql laravel laravel-5.4
3个回答
1
投票

要访问类别问题表列,您还必须在类别question_mapping模型上定义关系,例如:

public function category_questions() {
        return $this->hasOne('App\CategoryQuestions','category_question_id','category_question_id');
}

然后访问你想要的字段,如qazxsw poi。

顺便说一句,我建议命名你显示的第一个关系,如category_questions_mapping(),因为它与category_questions_mapping表链接。


0
投票

您不能仅更改$items->category_questions_mapping->category_questions->data方法来解决问题。但你可以在2个模型中建立2个关系,并通过2个关系查询category_questions

data

0
投票

你的关系使用如下:

// 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();
© www.soinside.com 2019 - 2024. All rights reserved.