php - 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();
那么我现在如何获取带有标签的字符呢?
解决方案
首先使用字符和标签之间的多对多关系设置模型
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);
推荐阅读
- react-native - react-native svg-charts中的X轴标签未正确显示
- python - 你能帮我让 Selenium 在 Chromedriver 中单击图像吗?
- godot - 如何将信号添加到使用 add_child 创建的对象
- php - 在选择 WooCommerce 产品变体价格后添加自定义字段值
- karate - 空手道加特林的响应时间比普通加特林显着增加
- c++ - STM32 - 在 HAL_UART_RxCpltCallback() 中调用步进电机时不会停止
- wordpress - 内容未通过 wordpress 上的 elementor 插件通过数据库更新
- flutter - 如何在 Flutter 中处理来自 API 的 RichText?
- python - 解析嵌套表达式以检索每个内部函数
- python - 如何制作恒定流畅的动画?