laravel5.4中表之间的多重关系

kjthegm6  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(327)

我在mysql数据库中有3个表(items、category\u questions\u mapping和category\u questions),其中有以下列:
items表有以下列:

item_id, uuid, radius, category_id

类别Map有以下列:

category_id, category_question_id

类别问题有以下列:

category_question_id, data

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

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

上述方法基本上是items表的category\ id与category\ question\Map表的category\ id之间的关系
问题陈述:
我想知道我应该在上面的方法中做些什么更改,以便能够从category\u questions表中提取数据列值。在上面的方法中,我们是否可以建立一个关系,以便它可以拉取数据列?
以上方法将在控制器中用于显示。

nnsrf1az

nnsrf1az1#

你不能只改变 category_questions 解决问题的方法。但是您可以在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();
vaqhlq81

vaqhlq812#

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

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

然后进入你想要的领域 $items->category_questions_mapping->category_questions->data .
顺便说一下,我建议您将显示的第一个关系命名为category\u questions\u mapping(),因为它与category\u questions\u mapping表链接。

ryevplcw

ryevplcw3#

你们的关系是这样使用的:

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

相关问题