Laravel eager loading -一对多关系



laravel dev.

我有三个比如A B C

A
-----------
-id
-main_location_id // **main location entry = 1**
B
-----------
-id
-a_id
-allocated_qty
C
-----------    
-id
-a_id
-location_id // **main location enrty + other locations enrty- 1,2,3**
-total_qty
-aval_qty

关系:

有许多的B

<表em>也有许多C

查询:

A::with(['B'])
->with(['C']) // here I got all location object from C tables, but I only want main_location_id = location_id data object + its qty
->where('a.id', 1)
->first();

我不明白如何获得location_id, total_qty, aval_qtyfrom tableCA

具有c。location_id = a.main_location_id

连我自己都不知道我做得对不对?

这可能吗?

请帮我解决这个问题

多谢!

这取决于你如何定义关系。如果在代码中像这样定义一个关系:

// models/A.php
public function c() {
return $this->hasMany(C::class);
}

将默认使用A的主键,即id,因此当Laravel为表名添加前缀时,它将变成a_id。这就变成了一个数组通过A.id = C.a_id许多属于AC年代。你必须传递更多的参数给hasMany来定义你自己的键。

然而,您需要的关系似乎是hasOne关系:您的A只有一个CA.main_location_id = C.location_id。因此,您可以使用手动键定义hasOne,如:

// models/A.php
public function c() {
return $this->hasOne(C::class, 'location_id', 'main_location_id');
}

如果是错误的键,则必须向hasOne()关系定义传递额外的参数。

如果您需要这两个关系,只需重命名函数(如果您有合适的表名,请使用复数和单数形式),您可以使用A::query()->with(['c', 'singleC'])

相关内容

  • 没有找到相关文章

最新更新