Laravel 数据库关系

Posted

技术标签:

【中文标题】Laravel 数据库关系【英文标题】:Laravel database relations 【发布时间】:2020-05-11 10:26:41 【问题描述】:

例如我有 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();

但如果我想显示更多数据,有什么合适的解决方案来解决这个问题,而不会使查询变得庞大并以某种方式将其分开以使其易于在刀片中显示?

【问题讨论】:

您可以使用database_view 使用此链接w3schools.com/sql/sql_view.asp 并使用sqlyog 应用程序在WIZARD 中创建数据库视图 【参考方案1】:

简单地使用 HasMany 关系,你的命名与 Laravel 标准不一致,如果你用模型的复数形式命名你的表,你可以避免定义 $table = 'a'。你的外键也不是标准的,你可以避免第二个参数有很多,如果他们命名可能,例如表ba_id。阅读这个post就可以了

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;

【讨论】:

以上是关于Laravel 数据库关系的主要内容,如果未能解决你的问题,请参考以下文章

使用 Laravel 4 使用关系数据库存储动态数据

我如何获得 Laravel 与其关系值的关系?

我如何获得 Laravel 与其关系值的关系?

Laravel 数据库模型自身之间的关系

从关系中获取数据,Laravel

Laravel 4 关系数据库查询