首页 > 解决方案 > Laravel:如何从多个表中查询数据?

问题描述

db 有 3 个表 chars、tags 和 chars_tags

chars 具有以下列:

id | char_name

标签具有以下列:

id | tag_name

chars_tags 具有以下列:

id | char_id | tag_id

我总是使用下面的代码来获取数据,因为上次 char 表有另一个名为 'tag_id' 的列,现在他们删除了 'tag_id' 列并将其更改为数据透视表,即 'chars_tags'

$char = chars::where('id', '=', 1)
     ->with('tags:id,tag_name')
     ->get();

那么我现在如何获取带有标签的字符呢?

标签: phpdatabaselaravel

解决方案


首先使用字符和标签之间的多对多关系设置模型

class Char extends Model
{
    public function tags()
    {
        return $this->belongsToMany(Tag::class, 'chars_tags', 'char_id');
    }
}

class Tag extends Model
{
    public function chars()
    {
        return $this->belongsToMany(Char::class, 'chars_tags', 'tag_id');
    }
}

现在您可以使用字符急切地加载相关标签

$char = Char::with('tags')
            ->where('id', '=', 1) 
            ->get(); 

find()或者如果你需要一个对象,你可以使用

$char = Char::with('tags')->find(1); 

推荐阅读