【问题标题】:Laravel: How to query data from multiple table?Laravel:如何从多个表中查询数据?
【发布时间】:2018-06-04 09:44:10
【问题描述】:

数据库有 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();

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

【问题讨论】:

标签: php database laravel


【解决方案1】:

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

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); 

【讨论】:

    【解决方案2】:

    也可以使用sql连接:https://laravel.com/docs/5.6/queries#joins1

    DB::table('chars')
    ->where('chars.id', 1)
    ->leftJoin('chars_tags', 'chars_tags.char_id', '=', 'chars.id')
    ->leftJoin('tags', 'tags.id', '=', 'chars_tags.tag_id')
    ->get();
    

    【讨论】:

    • 感谢答案,但我正在寻找关系方法
    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2016-06-04
    • 2019-10-08
    相关资源
    最近更新 更多