database - Laravel 数据库关系
问题描述
例如,我有 3 个表:
Table A:
id
name
Table B
id
name
tableA_id
Table C
id
name
tableB_id
我需要在表中显示表 A 中的所有数据和表 C 中的名称,如下所示:
id | name | TableC name
我可以编写代码来获取 tableC 的名称,如下所示:
$data = DB::table('tableA')
->join('tableB','tableB.tableA_id','=','tableA.id')
->join('tableC','tableC.tableB_id','=','tableC.id')
->select('tableA.id','tableA.name','tableC.name')
->get();
但是,如果我想显示更多数据,那么在不使查询变得庞大并以某种方式将其分开以使其易于在刀片中显示的情况下解决此问题的适当解决方案是什么?
解决方案
只需使用 HasMany 关系,您的命名与 Laravel 标准不一致,如果您以模型的复数形式命名表,则可以避免定义$table = 'a'
. 你的外键也不是标准的,你可以避免第二个参数有很多,如果它们被命名的话,例如 table b a_id
。阅读这篇文章就可以了
class A {
protected $table = 'a';
public function bs() {
return $this->hasMany(B::class, 'tableA_id');
}
}
class B {
protected $table = 'b';
public function cs() {
return $this->hasMany(C::class, 'tableB_id');
}
}
class C {
protected $table = 'c';
}
这个例子的命名很奇怪,因为制作复数形式的 A、B 和 C 表非常不方便。
当你想访问 C 关系时,你可以这样做,但是关系可以有多个,所以描述了它是如何工作的。
$a = A::find(1);
$cName = $a->bs->first()->cs->first()->name;
推荐阅读
- vaadin - 打包 JAR/WAR 时 Vaadin 不显示正确的网站图标
- sql - 如何在 SQL 中对用逗号分隔的序列号进行分组
- python - Raspberry Pi 4 上的 Visual Studio Code -- Interpereter 路径从 3.7.3 更改为 3.8
- python - 使用自定义类/函数作为排序函数中的键
- r - 如何以随机顺序拆分逗号分隔值并为 R 中的每个唯一值创建变量?
- answer-set-programming - 如何使用答案集编程获得一组满足学位要求的课程
- image - 我如何在 Flutter 中做一个像 Instagram 一样的图像选择器?
- hyperledger-fabric - 错误:背书客户端未能在教程中连接
- python - logger.info 在 Django 日志记录中不起作用
- composer-php - 如何将 composer.json 中所需的包更新为“^ab”?